传递一个委托本身作为参数

问题描述:

C#中是否有可能将一个委托或事件传递给一个方法,以便该方法可以为该委托分配一个新的事件处理函数并使用+=(而不是使该方法可以调用该委托)?传递一个委托本身作为参数

可以说我可以将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 
    } 
} 

希望它是有道理的。

+0

最好退一步,解释一下你在这里试图解决的问题。你的问题现在有点棘手。 – spender 2010-09-26 01:58:53

+0

没关系,我想通了。我只需要通过它作为参考。不管怎么说,还是要谢谢你。 – Juan 2010-09-26 02:00:22

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

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

(想想这样说:你怎么添加一个处理程序委托你使用+=,右这是一个分配运营商,这是静态的:你要分配委托到一个新的委托实例包括指定给+=的右侧,就像x += 1方法分配xx + 1,唯一的时间就可以永远分配外部变量从一个方法中的新的值或对象的,当它被作为一个ref,或者传递out参数)。

例如,下面的代码叶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 }; 
} 

这是同样的原理。

+0

我想通过代理作为'ref'的东西,但是还有一种方法来保留它的副本,以便我可以稍后用' - ='取消它的分配? – Juan 2010-09-26 02:30:03

+0

@ jsoldi:保留一份什么? – 2010-09-26 02:34:10

+0

那么,如果我使用'+ ='将一个新的事件处理程序分配给一个委托,那么当我完成正确的时候,我需要取消分配它?所以如果我不想用与'ref'参数相同的方法取消分配它,以后有什么办法可以取消分配吗?就好像我会保留一个指向委托的指针(而不是由委托调用的方法)。 – Juan 2010-09-26 02:40:40