你想要什么叫做open instance delegate。它不直接支持C#语言,但CLR支持它。
基本上,打开的实例委托与普通委托相同,但它在普通参数之前需要this
的额外参数,并且具有空目标(如静态方法的委托)。例如,打开实例相当于Action<T>
是:
delegate void OpenAction<TThis, T>(TThis @this, T arg);
这里有一个完整的例子:
void Main()
{
MethodInfo sayHelloMethod = typeof(Person).GetMethod("SayHello");
OpenAction<Person, string> action =
(OpenAction<Person, string>)
Delegate.CreateDelegate(
typeof(OpenAction<Person, string>),
null,
sayHelloMethod);
Person joe = new Person { Name = "Joe" };
action(joe, "Jack"); // Prints "Hello Jack, my name is Joe"
}
delegate void OpenAction<TThis, T>(TThis @this, T arg);
class Person
{
public string Name { get; set; }
public void SayHello(string name)
{
Console.WriteLine ("Hi {0}, my name is {1}", name, this.Name);
}
}
看一看this article了解更多详情。
你可以改一下用多一点的细节问题,我想我懂了部分但不当然。 – 2011-03-22 23:52:14
增加了我的意思的例子。基本上有可能有一个委托没有对象引用,并给它一个对象,当你打电话给它? – Will 2011-03-23 00:06:18
我改变了你的问题的标题,使其更清晰。随意回滚,如果你不喜欢它;) – 2011-03-23 00:14:08