আমি সি # তে জেনেরিক অ্যালগরিদমগুলি লেখার চেষ্টা করছি যা বিভিন্ন মাত্রার জ্যামিতিক সত্তার সাথে কাজ করতে পারে।
নীচের স্বীকৃত উদাহরণে আমার কাছে Point2এবং Point3উভয়ই একটি সাধারণ IPointইন্টারফেস প্রয়োগ করে ।
এখন আমি একটি ফাংশন GenericAlgorithmযা একটি ফাংশন কল GetDim। প্রকারের ভিত্তিতে এই ফাংশনের একাধিক সংজ্ঞা রয়েছে। ফলস-ব্যাক ফাংশনও রয়েছে যা প্রয়োগকারী কোনও কিছুর জন্য নির্ধারিত হয় IPoint।
আমি প্রাথমিকভাবে নিম্নলিখিত প্রোগ্রামটির আউটপুট 2, 3 হবে বলে আশাবাদী, তবে এটি 0, 0।
interface IPoint {
public int NumDims { get; }
}
public struct Point2 : IPoint {
public int NumDims => 2;
}
public struct Point3 : IPoint {
public int NumDims => 3;
}
class Program
{
static int GetDim<T>(T point) where T: IPoint => 0;
static int GetDim(Point2 point) => point.NumDims;
static int GetDim(Point3 point) => point.NumDims;
static int GenericAlgorithm<T>(T point) where T : IPoint => GetDim(point);
static void Main(string[] args)
{
Point2 p2;
Point3 p3;
int d1 = GenericAlgorithm(p2);
int d2 = GenericAlgorithm(p3);
Console.WriteLine("{0:d}", d1); // returns 0 !!
Console.WriteLine("{0:d}", d2); // returns 0 !!
}
}
ঠিক আছে, তাই কোনও কারণে কংক্রিটের ধরণের তথ্য হারিয়ে যায় GenericAlgorithm। কেন এটি ঘটে তা আমি পুরোপুরি বুঝতে পারি না তবে ঠিক আছে। আমি যদি এইভাবে এটি না করতে পারি তবে আমার কাছে অন্য বিকল্পগুলি কী আছে?
GetDim(যেমন আমি পাস করি Point4তবে GetDim<Point4>বিদ্যমান নেই) এর জন্য ফ্যাল ব্যাক ফাংশন প্রয়োজন । যাইহোক, সংকলকটি বিশেষায়িত বাস্তবায়ন সন্ধান করতে বিরক্ত করে বলে মনে হয় না।
NumDimsসম্পত্তিটি উপলব্ধ guarantee আপনি কিছু ক্ষেত্রে এটিকে কেন উপেক্ষা করছেন?