我有两个班,第一个:
public class A
{
public delegate void Function();
public string name;
public Function function;
public A(string name, Function function)
{
this.name = name;
this.function = function;
}
}
第二名:
public class B
{
public delegate void Function();
List<A> ListA;
// somewhere in function
void F()
{
ListA[i].function();
}
// ---
public void AddA(string name, Function function)
{
ListA.Add(new A(name, function)); // error here
}
}
它会抛出这些错误:
Error 2 Argument 2: cannot convert from 'App.B.Function' to 'App.A.Function'
Error 1 The best overloaded method match for 'App.A.A(string, App.A.Function)' has some invalid arguments
如何解决这个问题?
答案 0 :(得分:7)
您已经两次声明Function
委托,一个在A类内,一个在B内。
所以他们有两种不同的类型,一种叫App.B.Function
,另一种叫App.A.Function
。
如果你想与这两个类共享这个委托,只需要声明它一次并超出类的范围(即在汇编范围内),例如:
public delegate void Function();
public class A
{
public string name;
...
}
public class B
{
List<A> ListA;
...
}
但是,在System
命名空间中存在一定数量的通用委托,可用于表示各种功能。请查看System.Action<>
和System.Func<>
类型。
答案 1 :(得分:0)
发生这种情况的原因是Function
被宣告两次,每次都是一次