खोज…


टिप्पणियों

यदि पहुँच संशोधक छोड़ा गया है,

  • कक्षाएं डिफ़ॉल्ट रूप से internal
  • विधियाँ private द्वारा होती हैं
  • गेटर्स और सेटर्स संपत्ति के संशोधक को विरासत में देते हैं, डिफ़ॉल्ट रूप से यह private

संपत्तियों के public string someProperty {get; private set;} पर एक्सेस संशोधक केवल पहुंच को प्रतिबंधित कर सकते हैं, इसे चौड़ा नहीं कर सकते: public string someProperty {get; private set;}

जनता

public खोजशब्द एक वर्ग बनाता है (नेस्टेड कक्षाओं सहित), संपत्ति, विधि या क्षेत्र जो प्रत्येक उपभोक्ता के लिए उपलब्ध है:

public class Foo()
{
    public string SomeProperty { get; set; }

    public class Baz
    {
        public int Value { get; set; }
    }
}

public class Bar()
{
    public Bar()
    {
        var myInstance = new Foo();
        var someValue = foo.SomeProperty;
        var myNestedInstance = new Foo.Baz();
        var otherValue = myNestedInstance.Value;
    }        
}

निजी

private कीवर्ड केवल क्लास के अंदर उपयोग के लिए गुण, विधियाँ, फ़ील्ड और नेस्टेड क्लास को चिह्नित करता है:

public class Foo()
{
    private string someProperty { get; set; }

    private class Baz
    {
        public string Value { get; set; }
    }

    public void Do()
    {
        var baz = new Baz { Value = 42 };
    }
}

public class Bar()
{
    public Bar()
    {
        var myInstance = new Foo();

        // Compile Error - not accessible due to private modifier
        var someValue = foo.someProperty;
        // Compile Error - not accessible due to private modifier
        var baz = new Foo.Baz();
    }
}

अंदर का

आंतरिक खोजशब्द एक वर्ग (नेस्टेड कक्षाओं सहित), संपत्ति, विधि या क्षेत्र को एक ही विधानसभा में प्रत्येक उपभोक्ता के लिए उपलब्ध कराता है:

internal class Foo
{
    internal string SomeProperty {get; set;}
}

internal class Bar
{
    var myInstance = new Foo();
    internal string SomeField = foo.SomeProperty;

    internal class Baz
    {
        private string blah;
        public int N { get; set; }
    }
}

विधानसभा असेंबली में कोड जोड़कर कोड का उपयोग करने के लिए एक परीक्षण असेंबली को अनुमति देने के लिए इसे तोड़ा जा सकता है। फाइल:

using System.Runtime.CompilerServices;

[assembly:InternalsVisibleTo("MyTests")]

संरक्षित

केवल एक ही वर्ग और व्युत्पन्न वर्गों के अंदर उपयोग के लिए protected कीवर्ड चिह्न फ़ील्ड, विधियाँ गुण और नेस्टेड वर्ग:

public class Foo()
{
    protected void SomeFooMethod()
    {
        //do something
    }

    protected class Thing
    {
        private string blah;
        public int N { get; set; }
    }
}

public class Bar() : Foo
{
    private void someBarMethod()
    {
        SomeFooMethod(); // inside derived class
        var thing = new Thing(); // can use nested class
    }
}

public class Baz()
{
    private void someBazMethod()
    {
        var foo = new Foo();
        foo.SomeFooMethod(); //not accessible due to protected modifier
    }
}

संरक्षित आंतरिक

एक ही विधानसभा या किसी अन्य विधानसभा में व्युत्पन्न वर्गों के अंदर उपयोग के लिए protected internal कीवर्ड फ़ील्ड, विधियों, गुणों और नेस्टेड वर्गों को चिह्नित करता है:

विधानसभा 1

public class Foo
{
    public string MyPublicProperty { get; set; }
    protected internal string MyProtectedInternalProperty  { get; set; }

    protected internal class MyProtectedInternalNestedClass
    {
        private string blah;
        public int N { get; set; }
    }
}

public class Bar
{
    void MyMethod1()
    {
        Foo foo = new Foo();
        var myPublicProperty = foo.MyPublicProperty;
        var myProtectedInternalProperty = foo.MyProtectedInternalProperty;
        var myProtectedInternalNestedInstance =
            new Foo.MyProtectedInternalNestedClass();
    }
}

सभा २

public class Baz : Foo
{
    void MyMethod1()
    {
        var myPublicProperty = MyPublicProperty;
        var myProtectedInternalProperty = MyProtectedInternalProperty;
        var thing = new MyProtectedInternalNestedClass();
    }

    void MyMethod2()
    {
        Foo foo = new Foo();
        var myPublicProperty = foo.MyPublicProperty;

        // Compile Error
        var myProtectedInternalProperty = foo.MyProtectedInternalProperty;
        // Compile Error
        var myProtectedInternalNestedInstance =
            new Foo.MyProtectedInternalNestedClass();
    }

}

public class Qux
{
    void MyMethod1()
    {
        Baz baz = new Baz();
        var myPublicProperty = baz.MyPublicProperty;

        // Compile Error
        var myProtectedInternalProperty = baz.MyProtectedInternalProperty;
        // Compile Error
        var myProtectedInternalNestedInstance =
            new Baz.MyProtectedInternalNestedClass();
    }

    void MyMethod2()
    {
        Foo foo = new Foo();
        var myPublicProperty = foo.MyPublicProperty;

        //Compile Error
        var myProtectedInternalProperty = foo.MyProtectedInternalProperty;
        // Compile Error
        var myProtectedInternalNestedInstance =
            new Foo.MyProtectedInternalNestedClass();
    }
}

एक्सेस संशोधक आरेख

यहाँ सभी एक्सेस मॉडिफ़ायर venn आरेखों में हैं, अधिक सीमित करने से अधिक सुलभ तक:

पहुँच संशोधक आरेख
निजी निजी
अंदर का अंदर का
संरक्षित संरक्षित
संरक्षित आंतरिक संरक्षित आंतरिक
जनता जनता

नीचे आपको अधिक जानकारी मिल सकती है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow