将类A中的方法添加到类B的委托中,并在C#中从类A调用该委托

时间:2013-03-17 16:07:10

标签: c# methods delegates

如何在不事先知道我将添加哪个方法以及A类是什么的情况下,将类A中的方法添加到B类的委托中?然后从A类调用该代表?

class Class {
    public string someProperty;

    public delegate void myDelegate(Class obj);

    myDelegate handler = new myDelegate(mainClassMethod); //here is the problem..

    public void someMethod() {
        handler();
    }
}

class MainClass {
    public static void Main() {
        Class classObj = new Class();

        classObj.someProperty = "hello";

        public void mainClassMethod(Class obj) {
            System.Console.WriteLine(obj.someProperty);
        }

        classObj.someMethod();
    }
}

我是否应该使用除代表之外的其他内容?顺便说一句,我在C#中这样做!

1 个答案:

答案 0 :(得分:0)

使mainClassMethod成为静态,并通过类名MainClass访问它。此外,您无法将嵌套函数声明为类成员,您需要单独声明mainClassMethod

class MainClass {
    public static void Main()
    {
        Class classObj = new Class();

        classObj.someProperty = "hello";

        classObj.someMethod();
    }

    public static void mainClassMethod(Class obj) 
    {
        System.Console.WriteLine(obj.someProperty);
    }

}

您还声明了委托void myDelegate(Class obj);,因此您需要传递Class的实例作为参数。在我的示例中,我传递了this引用找到的对象,该对象是您在someMethod处调用的对象。

现在你可以写:

class Class {

    public string someProperty;

    public delegate void myDelegate(Class obj);

    myDelegate handler = new myDelegate(MainClass.mainClassMethod); //no error

    public void someMethod() 
    {
        handler(this);
    }
}