传递一个委托本身作为参数
问题描述:
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
}
}
希望它是有道理的。
答
事件:否(除非你在事件定义的类中)。这由C#编译器强制执行。
普通老代表:是。将它作为参数ref
传递。
(想想这样说:你怎么添加一个处理程序委托你使用+=
,右这是一个分配运营商,这是静态的:你要分配委托到一个新的委托实例包括指定给+=
的右侧,就像x += 1
方法分配x
到x + 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 };
}
这是同样的原理。
最好退一步,解释一下你在这里试图解决的问题。你的问题现在有点棘手。 – spender 2010-09-26 01:58:53
没关系,我想通了。我只需要通过它作为参考。不管怎么说,还是要谢谢你。 – Juan 2010-09-26 02:00:22