আমি লক্ষ করেছি যে সি # 4 এ alচ্ছিক পরামিতিগুলির সাথে যদি আপনি কোনও ইন্টারফেসে alচ্ছিক পরামিতি নির্দিষ্ট করে থাকেন তবে কোনও প্রয়োগকারী শ্রেণিতে সেই পরামিতিটিকে optionচ্ছিক করতে হবে না:
public interface MyInterface
{
void TestMethod(bool flag = false);
}
public class MyClass : MyInterface
{
public void TestMethod(bool flag)
{
Console.WriteLine(flag);
}
}
এবং সেইজন্য:
var obj = new MyClass();
obj.TestMethod(); // compiler error
var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
Anyoneচ্ছিক পরামিতিগুলি এভাবে কাজ করার জন্য কেন ডিজাইন করা হয়েছে তা কি কেউ জানেন?
একদিকে আমি মনে করি ইন্টারফেসগুলিতে নির্দিষ্ট হওয়া কোনও ডিফল্ট মানগুলিকে ওভাররাইড করার ক্ষমতাটি দরকারী তবে সত্য বলে আমি নিশ্চিত নই যে আপনি যদি ইন্টারফেসে ডিফল্ট মানগুলিও নির্দিষ্ট করতে সক্ষম হন তবে এটি কার্যকর করার সিদ্ধান্ত হতে পারে।
অন্যদিকে, এই সংযোগ বিচ্ছিন্ন হওয়ার অর্থ আপনি সর্বদা কংক্রিট বর্গ এবং ইন্টারফেসটি আন্তঃবিনে ব্যবহার করতে পারবেন না। এটি অবশ্যই কার্যকর হবে না যদি প্রয়োগের ক্ষেত্রে ডিফল্ট মান নির্দিষ্ট করা থাকে তবে আপনি যদি নিজের কংক্রিটের শ্রেণিটিকে ইন্টারফেস হিসাবে প্রকাশ করছেন (উদাহরণস্বরূপ কংক্রিটের ক্লাসটি ইনজেক্ট করার জন্য কিছু আইওসি ফ্রেমওয়ার্ক ব্যবহার করছেন) তবে সত্যিকারের কোনও সমস্যা নেই কলারের হিসাবে ডিফল্ট মান থাকাতে পয়েন্টটি সর্বদা যেভাবেই তা সরবরাহ করতে হবে।
MyInterface
এবং ঐচ্ছিক প্যারামিটার দিয়ে সেটিতে কল: ((MyInterface)obj).TestMethod();
।