Прежде всего, переменной-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());
}
}
Результат выполнения этой программы выглядит следующим образом.
Имя объекта, на который ссылается переменная AlphaRef: Alpha #1 Имя объекта, на который теперь ссылается переменная AlphaRef: Beta #1