Covariance and Contravariance in Delegates

posted on 01 Oct 2006 01:05 by tidno1 in csharp-and-dotnet
คงเคยใช้ delegate กันมาบ้างใช่มั้ยครับ ลองมารู้จักกับศัพท์แปลก ๆ กันซักสองคำ

Covariance

covariance คือการที่ return type ของ method นั้น specific มากกว่า (derive มาจาก) return type ของ delegate นั้น
class Shape { }

class Polygon : Shape { }

class Program {
    public delegate Shape ConstructCallback();

    public Shape Construct1() {...}

    public Polygon Construct2() {...}

    static void Main() {
        ConstructCallback handler1 = Construct1;

        // Covariance allows this delegate.
        ConstructCallback handler2 = Construct2;
    }
}

Contravariance

contravariance คือการที่ method มี parameter ที่เป็น base type ของ parameter ใน delegate ตัวนั้น ๆ
class Shape { }

class Polygon : Shape { }

class Program {
    public delegate void RenderCallback(Polygon);

    public void Render1(Shape s) {...}

    public void Render2(Polygon p) {...}

    static void Main() {
        // Contravariance permits this delegate.
        RenderCallback handler1 = Render1;

        RenderCallback handler2 = Render2;
    }
}

Comment

Comment:

Tweet

<a href="http://jmgnmaa.com">Arclites</a> like this are an example of quick, helpful answers.

#3 By cA7Q8KqB (193.69.20.1) on 2013-07-30 06:25

Heck of a job there, it abousltely helps me out.

#2 By z48rzlrCC (83.85.16.214) on 2013-07-28 04:40

แหม มาทีสาระตลอดเลยวุ้ย...
อิอิ ไว้ว่างๆ จะมาตามเก็บนะ ^^

#1 By #G~nap# on 2006-10-01 22:22