私は次のように反変性/共分散を説明する本を持っています:
- デリゲートは、そのメソッドターゲットよりも具体的なパラメータタイプを持つことができます。これは反変性と呼ばれます
- デリゲートの戻りタイプは、そのターゲットメソッドの戻りタイプよりも具体的でない場合があります。これは共分散と呼ばれます
そして、これは一例です。
using System;
delegate void StringAction(string s);
delegate object ObjectRetriever();
class Test
{
static void Main()
{
StringAction sa = new StringAction(ActionObject);
sa("hello");
ObjectRetriever o = new ObjectRetriever(RetrieveString);
object result = o();
Console.WriteLine(result);
}
static string RetrieveString() {return "hello";}
static void ActionObject(object o)
{
Console.WriteLine(o);
}
}
共変性/反変性を使うには、例のように使う必要があると思いましたが、と new
で同じ結果が得られるようです。(私はMonoでテストしました)。sa = ActionObject
o = RetrieveString
- それでは、なぜ作家は
new
共分散/反変性を説明するために使用するのですか? - 共分散/反変性のアイデアの背後にある理論は何ですか?それは単なる空想的な名前
object x = Everything inherit from object
ですか?この奇妙な名前はどこから来たのですか?それの使用法は何ですか?