원하는 것을 open instance delegate이라고합니다. C# 언어에서는 직접 지원되지 않지만 CLR에서는 지원합니다.
기본적으로 열려있는 인스턴스 대리인은 일반 대리인과 동일하지만 일반 매개 변수보다 앞에 this
에 대한 추가 매개 변수가 필요하며 null 메서드 (예 : 정적 메서드의 대리자)가 있습니다. 예를 들어, 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에서보세요.
당신이 좀 더 세부 질문을 바꿔 수, 나는 내가 부분적으로하지만 그것을 가지고 생각할 수 없습니다 확실한. –
무슨 뜻인지 예를 추가했습니다. 기본적으로 객체 참조가없는 델리게이트를 호출하여 호출 할 때 객체를 제공 할 수 있습니까? – Will
질문의 제목을 명확하게하기 위해 제목을 변경했습니다. 마음에 들지 않으면 다시 굴러 라.) –