static void Main() { // Создать ссылку из интерфейса IMyContraVarGenIF<Alpha> // на объект типа MyClass<Alpha>. // Это вполне допустимо как при наличии контравариантности, так и без нее. IMyContraVarGenIF <Alpha> AlphaRef = new MyClass <Alpha>(); // Создать ссылку из интерфейса IMyContraVarGenIF<beta> // на объект типа MyClass<Beta>. // И это вполне допустимо как при наличии контравариантности, // так и без нее. IMyContraVarGenIF <Beta> BetaRef = new MyClass <Beta>(); // Создать ссылку из интерфейса IMyContraVarGenIF<Beta> // на объект типа MyClass<Alpha>. // *** Это вполне допустимо благодаря контравариантности. *** IMyContraVarGenIF <Beta> BetaRef2 = new MyClass <Alpha>(); // Этот вызов допустим как при наличии контравариантности, так и без нее. BetaRef.Show(new Beta()); // Присвоить переменную AlphaRef переменной BetaRef. // *** Это вполне допустимо благодаря контравариантности. *** BetaRef = AlphaRef; BetaRef.Show(new Beta()); }
static void Main() { int i, j; // Сформировать объекты, используя фабрику. for (i = 0, j = 10; i < 10; i++, j--) { MyClass ob = MyClass.Factory(i, j); // Создать объект ob.Show(); } Console.WriteLine(); }
static void Main() { MyClass ob = new MyClass(); int s, d; for (s = 0, d = 10; s < 10; s++, d--) { MyClass AnotherOb = ob.Factory(s, d); //Создать объект AnotherOb.Show(); } Console.WriteLine(); }
static void Main() { MyClass ob1 = new ca2.MyClass(4, 5); MyClass ob2 = new MyClass(6, 7); Console.Write("ob1: "); ob1.Show(); Console.Write("ob2: "); ob2.Show(); if (ob1.SameAs(ob2)) { Console.WriteLine("ob1 и ob2 имеют одинаковые значения."); } else { Console.WriteLine("ob1 и ob2 имеют разные значения."); } Console.WriteLine(); // А теперь сделать объект ob1 копией объекта ob2. ob1.Copy(ob2); Console.Write("ob1 после копирования: "); ob1.Show(); if (ob1.SameAs(ob2)) { Console.WriteLine("ob1 и ob2 имеют одинаковые значения."); } else { Console.WriteLine("ob1 и ob2 имеют разные значения."); } }