classAnimal { Public stringName;}//base class classDog:animal {}//Derived Classes Interfaceimyif< outT>//covariance keyword out, generic interface + interface covariant{T getfirst ();//Constraint Method } classSimplereturn<t>: imyif<t>//generic types that implement generic interfaces { Publict[] Items =Newt[2];//initializing an array of objects PublicT GetFirst () {returnitems[0]; }//returns the first object of an array of objects } classProgram {Static voidDoSomething (imyif<animal> Returner)//static method, the method parameter is the interface of the parameter constraint to the animal object{Console.WriteLine (returner). GetFirst (). Name); } Static voidMain () {Simplereturn<Dog> Dogreturner =NewSimplereturn<dog> ();//instantiating an object constrained to a dog typedogreturner.items[0] =NewDog () {name="Avonlea"}//Assign Valueimyif<animal> Animalreturner = Dogreturner;//Associationbecomes an interface constrained to a animal objectDoSomething (Dogreturner);//executing a static method } }
Covariance and contravariance of interfaces