是否可以在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
}
}
希望它有意义。
答案 0 :(得分:3)
事件:否(除非您在定义事件的类中)。这是由C#编译器强制执行的。
普通老代表:是。将其作为ref
参数传递。
(考虑一下这个问题:如何向委托添加处理程序?你使用+=
,对吗?这是一个赋值运算符,它是静态的:你正在分配委托给一个新的委托实例,其中包含+=
右侧指定的方法,就像x += 1
将x
分配给x + 1
一样。唯一的一次,你可以< em>将外部变量分配给方法中的新值或对象是将其作为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 };
}
这是相同的原则。