मैं एक आधार वर्ग का उपयोग करते हुए, एक विधि है, जहां मैं जेनरिक उपयोग करने के लिए मजबूर करने के लिए सांकेतिक शब्दों में बदलनेवाला वर्तमान वर्ग पर एक सामान्य अभिव्यक्ति का उपयोग करना चाहते हैं के साथ: अबवर्तमान वर्ग प्रकार संदर्भ के लिए कैसे जेनरिक
public class TestClass
{
public void DoStuffWithFuncRef<T>(Expression<Func<T, object>> expression) where T : TestClass
{
this.DoStuffWithFuncRef(Property<T>.NameFor(expression));
}
}
, मैं टी को तत्काल कक्षा के प्रकार के रूप में मजबूर करना चाहता हूं, जो मुझे उम्मीद है कि सी # कंपाइलर सामान्य रूप से उपयोग करने के लिए सामान्य प्रकार को समझने का कारण होगा। जैसे मैं नीचे doStuff विधि है, जहां मैं सही प्रकार को निर्दिष्ट करने की कोडिंग से बचने के लिए चाहते हैं - बल्कि doStuffILikeButCannotGetToWork विधि का उपयोग करें:
public class SubTestClass : TestClass
{
public string AProperty { get; set; }
public void doStuff()
{
this.DoStuffWithFuncRef<SubTestClass>(e => e.AProperty);
}
public void doStuffILikeButCannotGetToWork()
{
this.DoStuffWithFuncRef(e => e.AProperty);
}
}
यह संभव है? क्या मुझे इसे अलग तरीके से करना चाहिए?
public class TestClass<T> where T : TestClass<T>
{
public void DoStuffWithFuncRef(Expression<Func<T, object>> expression)
{
this.DoStuffWithFuncRef(Property<T>.NameFor(expression));
}
}
और यह से निकाले जाते हैं:
धन्यवाद। मैंने जिस तरह से आप descibe में पूरी कक्षा जेनेरिक बनाने के बारे में नहीं सोचा था, लेकिन यह काम करता है और थोड़ा वाक्यविन्यास ओवरहेड का कारण बनता है। – Thies