मैं इस परिदृश्य है:जेनेरिक अधिभार संकल्प
class Foo { }
class Foo<T> : Foo { }
और फिर दो तरीकों
void DoStuff(Foo foo)
{
DoStuffImpl(foo);
}
void DoStuffImpl(Foo foo)
{
Console.WriteLine("A");
}
void DoStuffImpl<T>(Foo<T> foo)
{
Console.WriteLine("B");
}
void Main()
{
DoStuff(new Foo<int>()); // prints A
}
(ध्यान दें, कोड ब्राउज़र में लिखा गया था, लेकिन स्थिति मैं का सामना करना पड़ रहा है वर्णन करता है)
मैं सामान्य विधि को कॉल करने के लिए कैसे प्राप्त कर सकता हूं, और बी प्रिंट कर सकता हूं?
क्या यह बिना किसी प्रतिबिंब के किया जा सकता है? मेरे पास कुछ विचार हैं कि इसे प्रतिबिंब के साथ कैसे किया जा सकता है, लेकिन अगर कोई मौजूद है तो मैं क्लीनर समाधान की तलाश में हूं।
नोट: मैं DoStuff
जेनेरिक नहीं बना सकता क्योंकि इसका उपयोग डब्ल्यूसीएफ के साथ किया जाएगा और जेनेरिक प्रकारों को खोलने की अनुमति नहीं है।
विधि संकल्प संकलन समय पर होता है, रनटाइम नहीं। एक बार जब आप DoStuff के शरीर में आते हैं, तो कंपाइलर को यह जानने का कोई तरीका नहीं है कि यह मूल रूप से एक Foo था। –
DoStuffImpl के दूसरे अधिभार में टी घोषित किया गया है? –
@Eric, यह DoStuffImpl (Foo foo) होना चाहिए, मेरा बुरा। –
andreialecu