1

最初に2つのクラスがあります。

    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;
        }
    }

そして2番目に:

    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デリゲートを2回宣言しました。1つはクラスA内、もう1つはB内です。
したがって、これらは2つの異なるタイプであり、1つはと呼ばれApp.B.Function、もう1つはと呼ばれ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、各クラスで1回ずつ、2回宣言されるためです。

于 2012-05-12T15:29:28.780 に答える