我的問題有點類似於此:How to convert an action to a defined delegate of the same signature?代表們同樣簽名
爲什麼沒有與相同的簽名代表之間沒有隱含的皈依。例如,代碼:
class Program
{
private delegate void Foo1(int x);
private delegate void Foo2(int x);
static void Main(string[] args)
{
Foo1 foo1 = Console.WriteLine;
Foo2 foo2 = Console.WriteLine;
Call(foo1);
Call2(foo2);
}
static void Call(Action<int> action)
{
action(10);
}
static void Call2(Foo1 action)
{
action(10);
}
}
它不會編譯,因爲there isn't implicit convertion from Action<int> to Foo1.
但normaly這是同樣的事情。所以這意味着這個名字是別名,而不是真實的名字。所以我認爲這是一個好主意,可以像別名一樣思考它。所以在這種情況下,我們有一個delegate, that get one int value and returns nothing
的3個別名。而這些代表完全可以互換。但我們沒有它。所以問題是:爲什麼?通過簽名是同樣的事情,並沒有任何實現,所以具有相同簽名的代表是一個和許多別名相同...
它是C#缺陷還是有原因呢?至於我,我沒有看到任何。
我不認爲這是一個缺陷,個人,但這*爲*爲什麼我生氣的時候人們定義他們自己的代表而不是僅僅使用'Action' /'Func'。 – Servy