সি # তে, আপনি কোনও পৃথক সমাবেশে বাস না করে কেবল কোনও নিজস্ব নামকক্ষেত্রে কোনও শ্রেণি দৃশ্যমান করতে পারবেন? এটি সাধারণ সহায়ক শ্রেণীর জন্য দরকারী বলে মনে হয় যা অন্য কোথাও ব্যবহার করা উচিত নয়। (যেমন জাভা প্যাকেজ-ব্যক্তিগত ক্লাসগুলি কী বলে)
সি # তে, আপনি কোনও পৃথক সমাবেশে বাস না করে কেবল কোনও নিজস্ব নামকক্ষেত্রে কোনও শ্রেণি দৃশ্যমান করতে পারবেন? এটি সাধারণ সহায়ক শ্রেণীর জন্য দরকারী বলে মনে হয় যা অন্য কোথাও ব্যবহার করা উচিত নয়। (যেমন জাভা প্যাকেজ-ব্যক্তিগত ক্লাসগুলি কী বলে)
উত্তর:
আপনি যা চান তা সম্ভব বলে আমি মনে করি না।
আপনি ক্লাস করতে পারেন internalতবে এটি কেবল সমাবেশের বাইরের কাউকেই ক্লাস ব্যবহার থেকে বিরত রাখে। তবে আপনি যে নামটি দিয়ে এটি করতে চান তার জন্য আপনাকে আলাদা আলাদা সংসদ তৈরি করতে হবে। আমি ধরে নিচ্ছি এই কারণেই আপনি এটি করতে চান না।
নেমস্পেসের দৃশ্যমানতা প্রয়োগের জন্য সি # সংকলক প্রাপ্ত iler
এখানে একটি নিবন্ধ রয়েছে ( সি # তে নেমস্পেসের দৃশ্যমানতা ) যা "জাল নামস্থান" এর ফর্ম হিসাবে আংশিক ক্লাস ব্যবহার করার একটি পদ্ধতি দেখায় যা আপনি সহায়ক হতে পারেন।
লেখক উল্লেখ করেছেন যে এটি পুরোপুরি কার্যকর হয় না এবং তিনি ত্রুটিগুলি নিয়ে আলোচনা করেন। মূল সমস্যাটি হ'ল সি # ডিজাইনাররা সি # এইভাবে কাজ না করার জন্য ডিজাইন করেছিলেন । এটি সি # /। নেটগুলিতে প্রত্যাশিত কোডিং অনুশীলনগুলি থেকে প্রচুর পরিমাণে বিচ্যুত হয়, যা নেট নেট ফ্রেমওয়ার্কের বৃহত্তম সুবিধা।
এটি একটি ঝরঝরে কৌশল ... এখন এটি করবেন না ।
System.Net.Mime.MediaTypeNames.Application
অভ্যন্তরীণ হয় সমাবেশ (কঠোরভাবে মডিউল) বলুন গোপনীয়তা নেমস্পেসের দৃশ্যমানতার উপর এর কোনও প্রভাব নেই।
একই অ্যাসেমব্লির মধ্যে অন্য শ্রেণি থেকে কোনও শ্রেণীর গোপনীয়তা অর্জনের একমাত্র উপায় হ'ল কোনও শ্রেণীর অভ্যন্তরীণ শ্রেণি।
এই মুহুর্তে যদি শ্রেণিটি ব্যক্তিগত হয় তবে এটি কোনও শ্রেণীর অদৃশ্য বা বাহ্যিক শ্রেণীর নিজেই নয়।
সুরক্ষিত থাকলে এটি প্রত্যেকের কাছে দৃশ্যমান যা ব্যক্তিগত যখন এটি দেখতে পেত তবে বহিরাগত শ্রেণীর উপ শ্রেণীর কাছেও দৃশ্যমান।
public class Outer
{
private class Hidden { public Hidden() {} }
protected class Shady { public Shady() {} }
public class Promiscuous { public Promiscuous() {} }
}
public class Sub : Outer
{
public Sub():base()
{
var h = new Hidden(); // illegal, will not compile
var s = new Shady(); // legal
var p = new Promiscuous(); // legal
}
}
public class Outsider
{
public Outsider()
{
var h = new Outer.Hidden(); // illegal, will not compile
var s = new Outer.Shady() // illegal, will not compile
var p = new Outer.Promiscuous(); // legal
}
}
মূলত আপনি যা চান তা অর্জনের একমাত্র উপায় হ'ল বাইরের শ্রেণিকে নাম স্থানের রূপ হিসাবে ব্যবহার করা এবং সেই শ্রেণীর মধ্যে সীমাবদ্ধ।
এটি সরাসরি সম্ভব কিনা তা নিশ্চিত নয় তবে এটি জাল করার কয়েকটি ভাল উপায় হ'ল:
1) এই ধরণের স্টাফগুলির প্রয়োজনীয় ক্লাসগুলি একটি একক শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত যা একটি অভ্যন্তরীণ শ্রেণি হিসাবে সহায়ক শ্রেণি রয়েছে।
2) এক্সটেনশন পদ্ধতিগুলি ব্যবহার করুন এবং তারপরে কেবলমাত্র নামের জায়গার মধ্যে এক্সটেনশন পদ্ধতিগুলি উল্লেখ করুন।