将委托自身作为参数传递

时间:2010-09-26 01:53:56

标签: c#

是否可以在C#中将委托或事件传递给方法,以便该方法可以使用+=为该委托分配新的事件处理程序(而不是方法可以调用委托)? / p>

让我说我可以将C ++与C#混合使用。这将是我正在寻找的:

public class MyClass
{
    public Action* actionPtr;

    public void Assign(Action* action)
    {
        actionPtr = action;
        (*action) += SomeMethod;
    }

    public void Unassign()
    {
        (*action) -= SomeMethod;
    }

    void SomeMethod()
    {
        // Do stuff
    }
}

希望它有意义。

1 个答案:

答案 0 :(得分:3)

事件:(除非您在定义事件的类中)。这是由C#编译器强制执行的。

普通老代表:。将其作为ref参数传递。

(考虑一下这个问题:如何向委托添加处理程序?你使用+=,对吗?这是一个赋值运算符,它是静态的:你正在分配委托给一个新的委托实例,其中包含+=右侧指定的方法,就像x += 1x分配给x + 1一样。唯一的一次,你可以< em>将外部变量分配给方法中的新值或对象是将其作为refout参数传递的时间。

例如,以下代码保持list不变:

List<int> list = null;

InitializeListImproperly(list);

static void InitializeListImproperly(List<int> x)
{
    // x is a local variable, so this does nothing to the list variable
    // outside this scope!
    x = new List<int> { 1, 2, 3 };
}

以下内容会将其分配给新的List<int>

List<int> list = null;

InitializeListProperly(ref list);

static void InitializeListProperly(ref List<int> x)
{
    x = new List<int> { 1, 2, 3 };
}

这是相同的原则。