আমিও টেমপ্লেট বিশেষায়নের অনুকরণ করার জন্য একটি প্যাটার্নটি অনুসন্ধান করছিলাম। কিছু পদ্ধতি রয়েছে যা কিছু পরিস্থিতিতে কাজ করতে পারে। তবে মামলার কী আছে
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
।