সি # তে ডিফল্ট অ্যাক্সেস সংশোধকগুলি কী কী?


382

ক্লাস, পদ্ধতি, সদস্য, নির্মাতা, প্রতিনিধি এবং ইন্টারফেসের জন্য ডিফল্ট অ্যাক্সেস সংশোধক কী?

উত্তর:


484

C # সব কিছুর জন্য ডিফল্ট অ্যাক্সেস "সবচেয়ে সীমাবদ্ধ এক্সেস আপনি যে সদস্যের ঘোষণা পারে"

উদাহরণস্বরূপ:

namespace MyCompany
{
    class Outer
    {
        void Foo() {}
        class Inner {}
    }
}

সমতুল্য

namespace MyCompany
{
    internal class Outer
    {
        private void Foo() {}
        private class Inner {}
    }
}

এর এক ধরণের ব্যতিক্রম একটি সম্পত্তির একটি অংশকে (সাধারণত সেটার) নিজেকে সম্পত্তির ঘোষিত অ্যাক্সেসযোগ্যতার চেয়ে আরও সীমিত করে তোলে:

public string Name
{
    get { ... }
    private set { ... } // This isn't the default, have to do it explicitly
}

এটি সি # 3.0 স্পেসিফিকেশনকে বলতে হয় (বিভাগ 3.5.3.1):

কোনও সদস্য ঘোষণার প্রেক্ষাপটে নির্ভর করে কেবলমাত্র নির্দিষ্ট ধরণের ঘোষিত অ্যাক্সেসিবিলিটির অনুমতি রয়েছে। তদ্ব্যতীত, যখন কোনও সদস্য ঘোষণায় কোনও অ্যাক্সেস মডিফায়ার অন্তর্ভুক্ত না হয়, তখন যে প্রসঙ্গে ঘোষণাপত্রটি ঘটে তা ডিফল্ট ঘোষিত অ্যাক্সেসযোগ্যতা নির্ধারণ করে।

  • নেমস্পেসগুলিতে স্পষ্টতই সর্বজনীনভাবে ঘোষিত অ্যাক্সেসযোগ্যতা রয়েছে। নেমস্পেসের ঘোষণায় কোনও অ্যাক্সেস মডিফায়ার অনুমোদিত নয়।
  • সংকলন ইউনিট বা নেমস্পেসে ঘোষিত প্রকারগুলির সর্বজনীন বা অভ্যন্তরীণ ঘোষিত অ্যাক্সেসিবিলিটি এবং অভ্যন্তরীণ ঘোষিত অ্যাক্সেসিবিলিটির ডিফল্ট থাকতে পারে।
  • শ্রেণীর সদস্যদের পাঁচ ধরণের ঘোষিত অ্যাক্সেসযোগ্যতা এবং বেসরকারী ঘোষিত অ্যাক্সেসিবিলিটির ডিফল্টর মধ্যে যে কোনও থাকতে পারে। (নোট করুন যে কোনও শ্রেণীর সদস্য হিসাবে ঘোষিত কোনও ধরণের পাঁচ ধরণের ঘোষিত অ্যাক্সেসযোগ্যতা থাকতে পারে, অন্যদিকে নামস্থানটির সদস্য হিসাবে ঘোষিত কোনও প্রকারের মধ্যে কেবল সর্বজনীন বা অভ্যন্তরীণ ঘোষিত অ্যাক্সেসিবিলিটি থাকতে পারে))
  • স্ট্রাক্ট সদস্যদের সর্বজনীন, অভ্যন্তরীণ, বা ব্যক্তিগত ঘোষিত অ্যাক্সেসযোগ্যতা এবং ব্যক্তিগত ঘোষিত অ্যাক্সেসিবিলিটির ডিফল্ট থাকতে পারে কারণ স্ট্রাইকগুলি সুস্পষ্টভাবে সিল করা হয়। কাঠামোতে প্রবর্তিত স্ট্রাক্ট সদস্যরা (এটি সেই কাঠামোর দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত নয়) অভ্যন্তরীণ ঘোষিত অ্যাক্সেসযোগ্যতার সুরক্ষিত বা সুরক্ষিত রাখতে পারে না। (দ্রষ্টব্য যে কোনও কাঠামোর সদস্য হিসাবে ঘোষিত কোনও ধরণের সর্বজনীন, অভ্যন্তরীণ বা ব্যক্তিগত ঘোষিত অ্যাক্সেসিবিলিটি থাকতে পারে, অন্যদিকে নামস্থানের সদস্য হিসাবে ঘোষিত কোনও প্রকারের মধ্যে কেবল সর্বজনীন বা অভ্যন্তরীণ ঘোষিত অ্যাক্সেসযোগ্যতা থাকতে পারে))
  • ইন্টারফেস সদস্যদের স্পষ্টতই জনসাধারণের জন্য অ্যাক্সেসযোগ্যতা ঘোষিত হয়েছে। ইন্টারফেস সদস্যের ঘোষণায় কোনও অ্যাক্সেস মডিফায়ার অনুমোদিত নয়।
  • গণনার সদস্যদের স্পষ্টতই প্রকাশ্যে অ্যাক্সেসযোগ্যতা ঘোষণা করা হয়েছে have গণনার সদস্য ঘোষণায় কোনও অ্যাক্সেস সংশোধক অনুমোদিত নয়।

(নোট করুন যে নেস্টেড প্রকারগুলি "শ্রেণীর সদস্য" বা "স্ট্রাক্ট সদস্য" অংশের আওতায় আসবে - এবং তাই ব্যক্তিগত দৃশ্যমানতার জন্য এটি ডিফল্ট))


154
top level class: internal
method: private
members (unless an interface or enum): private (including nested classes)
members (of interface or enum): public
constructor: private (note that if no constructor is explicitly defined, a public default constructor will be automatically defined)
delegate: internal
interface: internal
explicitly implemented interface member: public!

13
এটি পরিষ্কার করে দেয় না যে যদি কোনও শ্রেণিও সদস্য হয় (নেস্টেড ধরণের হওয়ার কারণে) তবে এটি বেসরকারীকে ডিফল্ট করে। এছাড়াও, একটি ইন্টারফেস এবং এনামের সদস্যরা সর্বদা সর্বজনীন।
জন স্কিটি

1
@ নেরি না, এটি ব্যক্তিগত নয়। এটি জনসাধারণের। এটি প্রয়োগকারী ধরণে কেবল একটি স্লট পায় না, সুতরাং যদি class Foo : IFoo { IFoo.M() {} } ... Foo a = new Foo();আপনি এর Mসাথে অ্যাক্সেস করতে না পারেন a.M()তবে আপনি এটি দিয়ে অ্যাক্সেস করতে পারেন (a as IFoo).M()। (সুনির্দিষ্ট বিষয়ে আরও তথ্যের জন্য বিশ্লেষণটি পরীক্ষা করুন)
এম.স্ট্রাম্ম

130

সংক্ষিপ্ত উত্তর: ন্যূনতম সম্ভাব্য অ্যাক্সেস (সিএফ জোন স্কিটির উত্তর)।

দীর্ঘ উত্তর:

অ-নেস্টেড প্রকার, গণনা এবং প্রতিনিধি অ্যাক্সেসিবিলিটিগুলি ( কেবলমাত্র অভ্যন্তরীণ বা জনসাধারণের অ্যাক্সেসযোগ্যতা থাকতে পারে )

                     | Default   | Permitted declared accessibilities
------------------------------------------------------------------
namespace            | public    | none (always implicitly public)

enum                 | public    | none (always implicitly public)

interface            | internal  | public, internal

class                | internal  | public, internal

struct               | internal  | public, internal

delegate             | internal  | public, internal

নেস্টেড টাইপ এবং সদস্য অ্যাক্সেসব্লিটিগুলি

                     | Default   | Permitted declared accessibilities
------------------------------------------------------------------
namespace            | public    | none (always implicitly public)

enum                 | public    | none (always implicitly public)

interface            | public    | none

class                | private   | All¹

struct               | private   | public, internal, private²

delegate             | private   | All¹

constructor          | private   | All¹

interface member     | public    | none (always implicitly public)

method               | private   | All¹

field                | private   | All¹

user-defined operator| none      | public (must be declared public)

¹ সমস্ত === সর্বজনীন, সুরক্ষিত, অভ্যন্তরীণ, ব্যক্তিগত, সুরক্ষিত অভ্যন্তরীণ

স্ট্রাক্ট স্ট্রাক্ট বা ক্লাস থেকে উত্তরাধিকারী হতে পারে না (যদিও তারা পারে ইন্টারফেস), সুতরাং এটি সুরক্ষিত কোনও বৈধ সংশোধক নয়

নেস্টেড টাইপের অ্যাক্সেসযোগ্যতা তার অ্যাক্সেসযোগ্যতার ডোমেনের উপর নির্ভর করে, যা সদস্যের ঘোষিত অ্যাক্সেসযোগ্যতা এবং তাত্ক্ষণিকভাবে থাকা ধরণের অ্যাক্সেসিবিলিটি ডোমেন উভয় দ্বারা নির্ধারিত হয়। তবে, কোনও নেস্টেড টাইপের অ্যাক্সেসিবিলিটি ডোমেনটি এতে থাকা ধরণটির চেয়ে বেশি হতে পারে না।

দ্রষ্টব্য: সিআইএল এর সুরক্ষিত এবং অভ্যন্তরীণ (বিদ্যমান সুরক্ষিত "বা" অভ্যন্তরীণ বিপরীতে) এর বিধানও রয়েছে তবে আমার জ্ঞানের কাছে এটি বর্তমানে সি # তে ব্যবহারের জন্য উপলভ্য নয়।


দেখা:

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
http: //msdn.mic Microsoft.com/en-us/library/ms173121.aspx
http://msdn.microsoft.com/en- মার্কিন / গ্রন্থাগার / cx03xt0t.aspx
(আমি মাইক্রোসফ্ট ইউআরআই পছন্দ করি ...)


12

কটাক্ষপাত আছে (গ # প্রোগ্রামিং গাইড) অ্যাক্সেস সংশোধনকারীদের

ক্লাস এবং স্ট্রাক্ট অ্যাক্সেসিবিলিটি

শ্রেণি এবং স্ট্রাক্ট যা সরাসরি কোনও নেমস্পেসের মধ্যে ঘোষিত হয় (অন্য কথায়, যেগুলি অন্যান্য শ্রেণি বা স্ট্র্টের মধ্যে বাসা বাঁধে না) পাবলিক বা অভ্যন্তরীণ হতে পারে। কোনও অ্যাক্সেস মডিফায়ার নির্দিষ্ট না করা থাকলে অভ্যন্তরীণ ডিফল্ট।

নেস্টেড ক্লাস এবং স্ট্রাক্ট সহ স্ট্রাক্ট সদস্যদের প্রকাশ্য, অভ্যন্তরীণ বা ব্যক্তিগত হিসাবে ঘোষণা করা যেতে পারে। নেস্টেড ক্লাস এবং স্ট্রাক্ট সহ শ্রেণীর সদস্যরা সর্বজনীন, সুরক্ষিত অভ্যন্তরীণ, সুরক্ষিত, অভ্যন্তরীণ, ব্যক্তিগত সুরক্ষিত বা ব্যক্তিগত হতে পারে। নেস্টেড ক্লাস এবং স্ট্রাক্ট সহ শ্রেণীর সদস্য এবং স্ট্রাক্ট সদস্যদের অ্যাক্সেস স্তরটি ডিফল্টরূপে ব্যক্তিগত। প্রাইভেট নেস্টেড ধরণের ধরণের ধরণের বাহিরে থেকে অ্যাক্সেসযোগ্য নয়।

উত্সযুক্ত শ্রেণিতে তাদের বেস ধরণের চেয়ে বেশি অ্যাক্সেসযোগ্যতা থাকতে পারে না। অন্য কথায়, আপনার কাছে একটি সার্বজনীন বি বি থাকতে পারে না যা অভ্যন্তরীণ শ্রেণি এ থেকে প্রাপ্ত A.

আপনি অভ্যন্তরীণ প্রকারগুলি ব্যবহার করে নির্দিষ্ট অন্যান্য অ্যাসেমব্লিকে সক্ষম করতে পারেন InternalsVisibleToAttribute। আরও তথ্যের জন্য, বন্ধু সমাবেশগুলি দেখুন।

শ্রেণি এবং কাঠামোর সদস্য অ্যাক্সেসযোগ্যতা

শ্রেণি সদস্যদের (নেস্টেড ক্লাস এবং স্ট্রাক্ট সহ) ছয় প্রকারের অ্যাক্সেসের সাথে কোনওটি দিয়ে ঘোষণা করা যেতে পারে। স্ট্রাক্ট সদস্যদের সুরক্ষিত হিসাবে ঘোষণা করা যায় না কারণ স্ট্রাইকগুলি উত্তরাধিকার সমর্থন করে না।

সাধারণত, কোনও সদস্যের অ্যাক্সেসযোগ্যতা এতে থাকা ধরণের অ্যাক্সেসযোগ্যতার চেয়ে বড় নয়। তবে, সদস্য যদি ইন্টারফেস পদ্ধতিগুলি প্রয়োগ করে বা ভার্চুয়াল পদ্ধতিগুলিকে ওভাররাইড করে যা কোনও পাবলিক বেস শ্রেণিতে সংজ্ঞায়িত করা হয় তবে কোনও অভ্যন্তরীণ শ্রেণীর একজন পাবলিক সদস্য বিধানসভার বাইরে থেকে অ্যাক্সেসযোগ্য হতে পারে।

ক্ষেত্র, সম্পত্তি বা ইভেন্ট যে কোনও সদস্যের প্রকারটি কমপক্ষে সদস্যের মতোই অ্যাক্সেসযোগ্য হতে হবে। একইভাবে, কোনও পদ্ধতি, সূচক বা প্রতিনিধি হিসাবে যে কোনও সদস্যের রিটার্ন টাইপ এবং প্যারামিটার ধরণেরগুলি অবশ্যই সদস্যের মতোই কমপক্ষে অ্যাক্সেসযোগ্য হতে হবে। উদাহরণস্বরূপ, আপনার কাছে সর্বজনীন পদ্ধতি এম থাকতে পারে না যা সি জনসাধারণ ব্যতীত শ্রেণি সি প্রদান করে। তেমনিভাবে, এটিকে ব্যক্তিগত হিসাবে ঘোষণা করা হলে আপনার টাইপ এ এর ​​কোনও সুরক্ষিত সম্পত্তি থাকতে পারে না।

ব্যবহারকারী-সংজ্ঞায়িত অপারেটরদের সর্বদা সর্বজনীন এবং স্থির হিসাবে ঘোষণা করতে হবে। আরও তথ্যের জন্য অপারেটরকে ওভারলোডিং দেখুন।

ফাইনালাইজারদের অ্যাক্সেসিবিলিটি মডিফায়ার থাকতে পারে না।

অন্যান্য প্রকার

একটি নেমস্পেসের মধ্যে সরাসরি ঘোষিত ইন্টারফেসগুলি সর্বজনীন বা অভ্যন্তরীণ হিসাবে ঘোষণা করা যেতে পারে এবং ক্লাস এবং স্ট্রাক্টের মতো ইন্টারফেসগুলি অভ্যন্তরীণ অ্যাক্সেসের জন্য ডিফল্ট হয়। ইন্টারফেস সদস্যরা সর্বদা সর্বজনীন কারণ একটি ইন্টারফেসের উদ্দেশ্য অন্য শ্রেণীর বা কাঠামো অ্যাক্সেস করতে সক্ষম করা। ইন্টারফেস সদস্যদের জন্য কোনও অ্যাক্সেস সংশোধক প্রয়োগ করা যাবে না।

গণনার সদস্যরা সর্বদা সর্বজনীন থাকে এবং কোনও অ্যাক্সেস সংশোধক প্রয়োগ করা যায় না।

প্রতিনিধিরা ক্লাস এবং স্ট্রকের মতো আচরণ করে। ডিফল্টরূপে, যখন কোনও নামপথের মধ্যে সরাসরি ঘোষিত হয় তখন তাদের অভ্যন্তরীণ অ্যাক্সেস থাকে এবং নেস্টেড অবস্থায় ব্যক্তিগত অ্যাক্সেস থাকে।


8

ক্লাসটি ডিফল্টরূপে অভ্যন্তরীণ

  • ক্লাসের সদস্যরা ডিফল্টরূপে ব্যক্তিগত

ইন্টারফেসটি ডিফল্টরূপে অভ্যন্তরীণ

  • ইন্টারফেস সদস্যগণ ডিফল্টরূপে সর্বজনীন । (ইন্টারফেসগুলি আমাদের সদস্যদের কোনও প্রকারের অ্যাক্সেসযোগ্যতা নির্দিষ্ট করার অনুমতি দেয় না))

    দ্রষ্টব্য: আপনি যদি ইন্টারফেসের সদস্যদের জন্য কোনও অ্যাক্সেস স্পেসিফায়ার নির্দিষ্ট করার চেষ্টা করেন তবে এটি সংকলন ত্রুটি দেখায়।

স্ট্রাক্টটি ডিফল্টরূপে অভ্যন্তরীণ

  • স্ট্রাক্ট সদস্যরা ডিফল্টরূপে ব্যক্তিগত

5

আমি কিছু ডকুমেন্টেশন লিঙ্ক যুক্ত করতে চাই। আরও বিশদ এখানে দেখুন

এখানে চিত্র বর্ণনা লিখুন


1
শ্রেণিটি ডিফল্ট অভ্যন্তরীণ হয় এবং ব্যক্তিগত নয়।
বাহুবলি

1
আমি কোথায় ক্লাস লিখেছিলাম ব্যক্তিগত?
আসিফ মোশতাক

এই টেবিলটি কেবল নেস্টেড ধরণের জন্য বৈধ।
ব্লুসিলভার

বর্গটি ডিফল্টরূপে অভ্যন্তরীণ থাকে এবং নেমস্পেসের অভ্যন্তরে শ্রেণিটি ব্যক্তিগত হতে পারে না। তবে শ্রেণীর ভিতরে শ্রেণি (নেস্টেড বর্গ) ব্যক্তিগত হতে পারে
অরুণ

ইন্টারফেসের অ্যাক্সেস মডিফায়ারটি ডিফল্টরূপে অভ্যন্তরীণ
কমলা হানচিনাল

4

সবচেয়ে সহজ উত্তর নিম্নলিখিত .....

সি # তে থাকা সমস্ত সদস্য সর্বদা ডিফল্টরূপে সম্ভব সর্বনিম্ন অ্যাক্সেসযোগ্য সংশোধক গ্রহণ করে।

এ কারণেই কোনও সমাবেশে সমস্ত শীর্ষ স্তরের শ্রেণিগুলি ডিফল্টরূপে "অভ্যন্তরীণ" হয়, যার অর্থ তারা যে সমাবেশে থাকে সেগুলির কাছে তারা সর্বজনীন, তবে ব্যক্তিগত বা বাইরের সমাবেশগুলিতে অ্যাক্সেস থেকে বঞ্চিত। শীর্ষ স্তরের শ্রেণীর জন্য একমাত্র অন্য বিকল্পটি সর্বজনীন যা আরও অ্যাক্সেসযোগ্য। নেস্টেড টাইপগুলির জন্য এনামস এবং ইন্টারফেসের সদস্যদের মতো কয়েকটি বিরল ব্যতিক্রম ব্যতীত সমস্ত ব্যক্তিগত এটিই কেবল সর্বজনীন হতে পারে। কিছু উদাহরণ. শীর্ষ স্তরের শ্রেণি এবং ইন্টারফেসের ক্ষেত্রে, খেলাপিগুলি হ'ল:

শ্রেণীর প্রাণী যেমন অভ্যন্তরীণ শ্রেণীর প্রাণীর মতো

ইন্টারফেস প্রাণী জনসাধারণের ইন্টারফেস হিসাবে একই প্রাণী

নেস্টেড ক্লাস এবং ইন্টারফেসের ক্ষেত্রে (অভ্যন্তরের প্রকারের), খেলাপিগুলি হ'ল:

শ্রেণীর প্রাণী যেমন প্রাইভেট ক্লাস অ্যানিমাল

ইন্টারফেস প্রাইভেট ইন্টারফেস প্রাণী হিসাবে একই প্রাণী

যদি আপনি কেবল ধরে নেন যে ডিফল্ট সর্বদা সর্বাধিক ব্যক্তিগত হয়, তবে আপনাকে ডিফল্ট পরিবর্তন করার প্রয়োজন না হওয়া পর্যন্ত আপনাকে অ্যাকসেসর ব্যবহার করার দরকার নেই। সহজ।



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.