我的问题有点类似于这个:如何将动作转换为具有相同签名的已定义委托?
为什么具有相同签名的委托之间没有隐式转换。例如,代码:
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.
但通常它是一样的。所以这意味着这些名称是别名,而不是实际名称。所以我认为把它当作别名来考虑是个好主意。所以在这种情况下,我们有 a 的 3 个别名delegate, that get one int value and returns nothing
。并且这些代表可以完全互换。但我们没有。所以问题是:为什么?通过签名它是同一件事,并且没有任何实现,因此具有相同签名的委托是一个并且具有许多别名的相同......
是 C# 缺陷还是有原因?至于我,我什么都看不到。