1

我有两节课,首先:

    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

如何解决这个问题?

4

2 回答 2

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<>类型。

于 2012-05-12T15:28:56.107 回答
0

它发生的原因是它Function被声明了两次,每个类一次

于 2012-05-12T15:29:28.780 回答