你想要什麼叫做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