जो आप चाहते हैं उसे open instance delegate कहा जाता है। यह सी # भाषा में सीधे समर्थित नहीं है, लेकिन सीएलआर इसका समर्थन करता है।
असल में, एक खुला उदाहरण प्रतिनिधि सामान्य प्रतिनिधि के समान होता है, लेकिन सामान्य पैरामीटर से पहले 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-23 00:07:55
आप थोड़ा और अधिक विवरण के साथ सवाल अलग तरीके से व्यक्त कर सकता है, मुझे लगता है मैं यह आंशिक रूप से लेकिन नहीं मिला सोच सकते हैं ज़रूर। –
मेरा मतलब क्या है इसका एक उदाहरण जोड़ा गया। असल में क्या किसी ऑब्जेक्ट संदर्भ के बिना प्रतिनिधि होना संभव है और इसे कॉल करते समय इसे ऑब्जेक्ट देना संभव है? – Will
मैंने इसे स्पष्ट करने के लिए आपके प्रश्न का शीर्षक बदल दिया। अगर आपको यह पसंद नहीं है तो वापस रोल करने के लिए स्वतंत्र महसूस करें;) –