古詩詞大全網 - 個性簽名 - C#,委托裏的簽名是什麽意思?

C#,委托裏的簽名是什麽意思?

下面是三個大臣根據委托的簽名定義的方法,註意的是我們定義的委托簽名是要返回MinisterReturns,但下面三個大臣返回的東西都不壹樣。為什麽可以這樣做呢?

我們在下面結果運行後在進行解析:

class MinisterA

{

public static goldCoin MinisterAOneYearDo()

{

goldCoin coins = new goldCoin(100);

Console.WriteLine("我是大臣A,我給國王帶來了100顆金幣.");

return coins;

}

}

class MinisterB

{

public static goods MinisterBOneYearDo()

{

goods GOODS = new goods();

Console.WriteLine("我是大臣B,我給國王帶來了本國沒有的精美貨物.");

return GOODS;

}

}

class MinisterC

{

public static goldCoin MinisterCOneYearDo()

{

goldCoin coins = new goldCoin(10);

Console.WriteLine("我是大臣C,我給國王帶來了還是原來的那10顆金幣.");

return coins;

}

}

class Program

{

static void Main(string[] args)

{

//讓我們了解下國王的命令,其實就是我們委托的簽名

//delegate MinisterReturns MinisterOneYearDo();

Console.WriteLine("國王的命令:",king.KingsOrder);

//大臣A根據委托的簽名的所寫的方法傳給另壹個方法去處理

king.handleMinisterOneyearDo(MinisterA.MinisterAOneYearDo);

Console.ReadLine();

//大臣B根據委托的簽名的所寫的方法傳給另壹個方法去處理

king.handleMinisterOneyearDo(MinisterB.MinisterBOneYearDo);

Console.ReadLine();

//大臣C根據委托的簽名的所寫的方法傳給另壹個方法去處理

king.handleMinisterOneyearDo(MinisterC.MinisterCOneYearDo);

Console.ReadLine();

}

} 上面說過為什麽具體實現方法返回的值跟委托delegate返回的值不壹樣都可以呢?其實用到了委托中的協變,下面是引用MSDN中對委托中的協變的解析,當委托方法的返回類型具有的派生程度比委托簽名更大時,就稱為協變委托方法。因為方法的返回類型比委托簽名的返回類型更具體,所以可對其進行隱式轉換。這樣該方法就可用作委托。協變使得創建可被類和派生類同時使用的委托方法成為可能。