दो संभव समाधान:
typesafe नहीं:
public void WorkWith<T>(Action<T> method)
{
method.Invoke((T)(object)this);
}
यह typesafe नहीं है क्योंकि आप इसे किसी भी तरीके से एक एकल पैरामीटर और कोई वापसी है कि पारित कर सकते हैं मान, जैसे:
WorkWith((string x) => Console.WriteLine(x));
typesafe "संस्करण" (सामान्य बाधाओं का प्रयोग करके):
public class MyClass
{
public void WorkWith<T>(Action<T> method) where T : MyClass
{
method.Invoke((T)this);
}
}
यहां मुद्दा यह है कि T
को this
कास्ट करने के लिए सक्षम होने के लिए है, संकलक सुनिश्चित करें कि this
हमेशा T
को castable है बनना चाहता है (ताकि जरूरत बाधा के लिए)। जैसा कि प्रकार-सुरक्षित-सुरक्षित उदाहरण में दिखाया गया है, जेनेरिक के साथ उपयोग किए जाने वाले "शास्त्रीय" (असुरक्षित) समाधान को object
पर कास्ट से गुजर रहा है।
हालांकि नीचे उपयोगकर्ता गलत जवाब हो सकता था, यह अस्पष्ट था इसलिए मैंने इसे संपादित किया है और स्वीकार किए जाते हैं। यह उत्तर भी बहुत अच्छा है क्योंकि यह संदिग्ध नहीं था और परिणाम को स्पष्टीकरण के संदर्भ में दिखाता है। मैं दोनों को स्वीकार करना चाहता हूं लेकिन ओह ठीक है। – KthProg
upvoted और एक जवाब जो मूल रूप से गलत है और कोई स्पष्टीकरण नहीं ... –
@ Selman22 मैं मूल पोस्टर के लिए बुरा लग रहा है, लेकिन मैं सहमत होना होगा शामिल की तुलना में इस सवाल का जवाब में स्वीकार किया जाना चाहिए। बदला हुआ। – KthProg