将委托从一个类传递给另一个类

时间:2012-05-12 15:24:06

标签: c# delegates

我有两个班,第一个:

    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

如何解决这个问题?

2 个答案:

答案 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被宣告两次,每次都是一次