Console.WriteLine("Имя объекта, на который ссылается переменная AlphaRef: " + AlphaRef.GetObj ect .GetName);
//А теперь создать объект MyClass
// *** Эта строка кода вполне допустима благодаря ковариантности. ***
AlphaRef = new MyClass
Console.WriteLine("Имя объекта, на который теперь ссылается " +
"переменная AlphaRef: " + AlphaRef.GetObject.GetName);
Прежде всего, переменной-AlphaRef типа IMyCoVarGenIF
Ради большей наглядности примера вся рассмотренная выше последовательность операций собрана ниже в единую программу.
// Продемонстрировать ковариантность в обобщенном интерфейсе, using System;
// Этот обобщенный интерфейс поддерживает ковариантность. public interface IMyCoVarGenIF
Т GetObjectO;
}
// Реализовать интерфейс IMyCoVarGenlF. class MyClass
T obj;
public MyClass(T v) { obj = v; } public T GetObjectO { return obj; }
}
// Создать простую иерархию классов, class Alpha { string name;
public string GetNameO { return name; }
// ...
}
class Beta : Alpha {
public Beta(string n) : base(n) { }
// ...
}
class VarianceDemo { static void Main {
// Создать ссылку из интерфейса IMyCoVarGenlF на объект типа MyClass
// Это вполне допустимо как при наличии ковариантности, так и без нее. IMyCoVarGenIF
Console.WriteLine("Имя объекта, на который ссылается переменная " +
"AlphaRef: " + AlphaRef.GetObj ect.GetName);
//А теперь создать объект MyClass
// *** Эта строка кода вполне допустима благодаря ковариантности. *** AlphaRef = new MyClass
Console.WriteLine("Имя объекта, на который теперь ссылается переменная " + "AlphaRef: " + AlphaRef.GetObj ect .GetName);
}
}