সুন্দর প্রশ্ন! যারা প্রতিদিন সি # করেন না তাদের জন্য আমি আরও দীর্ঘ ব্যাখ্যা যোগ করতে চাই ... কারণ প্রশ্নটি সাধারণত নাম রেজোলিউশন ইস্যুগুলির একটি ভাল অনুস্মারক।
মূল কোডটি নিন, নিম্নলিখিত উপায়ে কিছুটা সংশোধন করা হয়েছে:
- আসল নামের (যেমন
return this is Sparta
) এর সাথে তুলনা করার পরিবর্তে প্রকারের নামগুলি মুদ্রণ করা যাক ।
- ইন্টারফেস নাম রেজোলিউশন চিত্রিত
Athena
করতে Place
সুপারক্লাসে ইন্টারফেসটি সংজ্ঞায়িত করা যাক ।
- ক্লাসে
this
যেমন আবদ্ধ থাকে তেমন নামটি প্রিন্টও করি Sparta
, কেবল সবকিছু খুব পরিষ্কার করে দেওয়া।
কোডটি এর মতো দেখাচ্ছে:
public class Place {
public interface Athena { }
}
public class Sparta : Place
{
public void printTypeOfThis()
{
Console.WriteLine (this.GetType().Name);
}
public void printTypeOfSparta()
{
Console.WriteLine (typeof(Sparta));
}
public void printTypeOfAthena()
{
Console.WriteLine (typeof(Athena));
}
}
আমরা এখন একটি Sparta
অবজেক্ট তৈরি করি এবং তিনটি পদ্ধতি কল করি।
public static void Main(string[] args)
{
Sparta s = new Sparta();
s.printTypeOfThis();
s.printTypeOfSparta();
s.printTypeOfAthena();
}
}
আমরা যে আউটপুট পাই তা হ'ল:
Sparta
Athena
Place+Athena
তবে, আমরা যদি প্লেস ক্লাসটি সংশোধন করি এবং স্পার্টা ইন্টারফেসটি সংজ্ঞায়িত করি:
public class Place {
public interface Athena { }
public interface Sparta { }
}
তারপরে এটি হ'ল Sparta
- ইন্টারফেস - নামটি অনুসন্ধানের জন্য প্রথমে উপলব্ধ হবে এবং আমাদের কোডের আউটপুট এতে পরিবর্তিত হবে:
Sparta
Place+Sparta
Place+Athena
সুতরাং আমরা MakeItReturnFalse
কার্যকারিতা সংজ্ঞা টাইপ তুলনা সঙ্গে কার্যকরভাবে গণ্ডগোল করেছি কেবল সুপারক্লাসে স্পার্টা ইন্টারফেসকে সংজ্ঞায়িত করে, যা নামটির রেজোলিউশনের মাধ্যমে প্রথম পাওয়া যায়।
তবে কেন নাম # রেজোলিউশনে সুপারক্লাসে সংজ্ঞায়িত ইন্টারফেসগুলিকে অগ্রাধিকার দিতে সি # বেছেছেন? @ জোনস্কিট জানেন! এবং আপনি যদি তার উত্তরটি পড়েন তবে আপনি সি # তে নাম রেজোলিউশন প্রোটোকলের বিশদ পাবেন।