ইসিএমএ 335 থেকে বিভাগ 1 এর 8.10.4 ধারা:
সিটিএস উভয় নামের উপর নিয়ন্ত্রণ নিয়ন্ত্রণ সরবরাহ করে যা একটি বেস টাইপ (লুকানো) এবং ডেরাইভ ক্লাসে লেআউট স্লটগুলির ভাগ (ওভাররাইডিং) থেকে দৃশ্যমান। নাম থেকে আড়াল বা নাম এবং স্বাক্ষর দ্বারা আড়াল হিসাবে উদ্ভূত শ্রেণিতে কোনও সদস্যকে চিহ্নিত করে লুকানো নিয়ন্ত্রণ করা হয়। গোপনীয়তা সর্বদা সদস্যের ধরণের ভিত্তিতে করা হয়, অর্থাৎ প্রাপ্ত ক্ষেত্রের নামগুলি বেস ক্ষেত্রের নামগুলি লুকিয়ে রাখতে পারে তবে পদ্ধতির নাম, সম্পত্তির নাম বা ইভেন্টের নাম নয়। যদি কোনও উত্পন্ন সদস্যকে নাম অনুসারে আড়াল হিসাবে চিহ্নিত করা হয়, তবে একই নামের বেস শ্রেণিতে একই ধরণের সদস্যগণ উদ্ভূত শ্রেণিতে দৃশ্যমান নয়; যদি সদস্যটিকে নাম এবং স্বাক্ষর দ্বারা আড়াল হিসাবে চিহ্নিত করা হয় তবে ঠিক একই নাম এবং প্রকার (ক্ষেত্রগুলির জন্য) বা পদ্ধতি স্বাক্ষর (পদ্ধতিগুলির জন্য) সহ একই ধরণের সদস্য উদ্ভূত শ্রেণীর কাছ থেকে লুকানো থাকে। এই দুটি রূপের আড়ালের মধ্যে পার্থক্যের বাস্তবায়ন পুরোপুরি উত্স ভাষা সংকলক এবং প্রতিবিম্ব গ্রন্থাগার দ্বারা সরবরাহ করা হয়; এটি নিজেই ভেসে সরাসরি প্রভাব ফেলছে না।
(এটি অবিলম্বে এটি থেকে পরিষ্কার নয়, তবে এর hidebysig
অর্থ "নাম এবং স্বাক্ষর দ্বারা আড়াল করুন"))
বিভাগ 2 এর 15.4.2.2 বিভাগেও:
লুকোচুরিটি সরঞ্জামগুলির ব্যবহারের জন্য সরবরাহ করা হয় এবং VES দ্বারা উপেক্ষা করা হয়। এটি সুনির্দিষ্ট করে যে ঘোষিত পদ্ধতিটি বেস শ্রেণীর ধরণের সমস্ত পদ্ধতি গোপন করে যা একটি মেলে পদ্ধতি পদ্ধতির স্বাক্ষরযুক্ত; বাদ দেওয়া হলে, স্বাক্ষর নির্বিশেষে পদ্ধতিতে একই নামের সমস্ত পদ্ধতি লুকানো উচিত।
উদাহরণ হিসাবে, ধরুন আপনার কাছে রয়েছে:
public class Base
{
public void Bar()
{
}
}
public class Derived : Base
{
public void Bar(string x)
{
}
}
...
Derived d = new Derived();
d.Bar();
এটি বৈধ, কারণ আড়াল Bar(string)
হয় নাBar()
, কারণ সি # সংকলক ব্যবহার করে hidebysig
। যদি এটি শব্দার্থবিজ্ঞানের "নাম দ্বারা আড়াল করুন" ব্যবহার করে, আপনি Bar()
প্রকারের কোনও রেফারেন্সে একেবারেই কল করতে সক্ষম হবেন না Derived
, যদিও আপনি এখনও এটি বেসে ফেলে দিতে পারেন এবং সেভাবে কল করতে পারেন।
সম্পাদনা করুন: আমি শুধু একটি ডিএলএল উপরে কোড কম্পাইল, এটা ildasming, সরিয়ে এটির চেষ্টা করেছি hidebysig
জন্য Bar()
এবং Bar(string)
, এটা আবার ilasming, তারপর কল করতে চাইছেন Bar()
অন্যান্য কোড থেকে:
Derived d = new Derived();
d.Bar();
Test.cs(6,9): error CS1501: No overload for method 'Bar' takes '0' arguments
যাহোক:
Base d = new Derived();
d.Bar();
(কোনও সংকলনের সমস্যা নেই))
Shadows
এবংOverloads
VB.NET হবে।