मैं टेम्पलेट विशेषज्ञता का अनुकरण करने के लिए एक पैटर्न भी खोज रहा था। कुछ दृष्टिकोण हैं जो कुछ परिस्थितियों में काम कर सकते हैं। हालांकि मामले का क्या
static void Add<T>(T value1, T value2)
{
}
बयानों का उपयोग करके कार्रवाई का चयन करना संभव होगा if (typeof(T) == typeof(int))
। लेकिन एक ही वर्चुअल फंक्शन कॉल के ओवरहेड के साथ वास्तविक टेम्पलेट विशेषज्ञता का अनुकरण करने का एक बेहतर तरीका है:
public interface IMath<T>
{
T Add(T value1, T value2);
}
public class Math<T> : IMath<T>
{
public static readonly IMath<T> P = Math.P as IMath<T> ?? new Math<T>();
T IMath<T>.Add(T value1, T value2)
{
throw new NotSupportedException();
}
}
class Math : IMath<int>, IMath<double>
{
public static Math P = new Math();
int IMath<int>.Add(int value1, int value2)
{
return value1 + value2;
}
double IMath<double>.Add(double value1, double value2)
{
return value1 + value2;
}
}
अब हम बिना किसी प्रकार के अग्रिम में जाने बिना लिख सकते हैं:
static T Add<T>(T value1, T value2)
{
return Math<T>.P.Add(value1, value2);
}
private static void Main(string[] args)
{
var result1 = Add(1, 2);
var result2 = Add(1.5, 2.5);
return;
}
यदि विशेषज्ञता को न केवल कार्यान्वित प्रकारों के लिए बुलाया जाना चाहिए, बल्कि व्युत्पन्न प्रकार भी, तो कोई In
इंटरफ़ेस के लिए एक पैरामीटर का उपयोग कर सकता है। हालाँकि, इस मामले में वापसी के प्रकार सामान्य प्रकार के नहीं हो सकते हैं T
।