Aracılığıyla paylaş


Kısıtlama erişeninin erişilebilirlik (C# Programlama Kılavuzu)

Al ve set bölümlerini bir özellik veya dizin oluşturucu adı verilir erişimcileri.Varsayılan olarak bu erişimcileri aynı görünürlüğün veya erişim düzeyi: ait oldukları özellik veya dizin oluşturucu.Daha fazla bilgi için bkz: Erişilebilirlik düzeyleri.Ancak, bazen bu erişimcileri birine erişimi sınırlamak yararlıdır.Genellikle, bu sınırlama erişilebilirliğini içerir set tutma sırasında erişeni get erişimci genel olarak erişilebilir.Örne?in:

private string name = "Hello";

public string Name
{
    get
    {
        return name;
    }
    protected set
    {
        name = value;
    }
}

Bu örnekte, bir özellik adı verilen Name tanımlayan bir get ve set erişimci.get Erişimci özelliği kendisi, erişilebilirlik düzeyini alır public bu durumda iken set erişimci açıkça kısıtlanan uygulayarak Korunan erişeni için erişim değiştiricisi.

Erişim değiştiricileri kısıtlamalar

Özellikleri veya dizinleyiciler erişimci değiştiricilerini kullanarak bu koşullara tabi olur:

  • Bir arabirim veya açık bir erişimci değiştiriciler kullanamazsınız arabirimi üye uygulaması.

  • Yalnızca özellik veya dizin oluşturucu her ikisi de varsa erişimci değiştiriciler kullanabilirsiniz set ve get erişimcileri.Bu durumda, değiştirici birinde yalnızca iki erişimcileri izin verilir.

  • Özellik veya dizin oluşturucusu varsa, bir geçersiz kılma değiştiricisi, erişimci değiştiricisi uymalı geçersiz kılınmış erişimci erişimcisine varsa.

  • Erişeninin erişilebilirlik düzeyinde özellik veya dizin oluşturucusu kendisini erişilebilirlik düzeyini daha kısıtlayıcı olmalıdır.

Geçersiz kılma erişimcileri üzerinde erişim değiştiricileri

Bir özellik veya dizin oluşturucu geçersiz kıldığınızda, geçersiz kılınmış erişimcileri geçersiz kılma koduna erişilebilir olmalıdır.Ayrıca, hem özellik/dizinleyici erişilebilirlik düzeyini ve erişimcileri, karşılık gelen geçersiz kılınmış özellik/dizinleyici ve erişimcileri eşleşmesi gerekir.Örne?in:

public class Parent
{
    public virtual int TestProperty
    {
        // Notice the accessor accessibility level.
        protected set { }

        // No access modifier is used here.
        get { return 0; }
    }
}
public class Kid : Parent
{
    public override int TestProperty
    {
        // Use the same accessibility level as in the overridden accessor.
        protected set { }

        // Cannot use access modifier here.
        get { return 0; }
    }
}

Arabirimleri uygulayan

Bir arabirim geliþtirmek için bir erişimci kullandığınızda, erişimci eriþim deðiþtiricisi olmayabilir.Ancak, bir erişimci gibi kullanarak arabirimini uygulayan, get, aşağıdaki örnekte olduğu gibi bir erişim değiştiricisi erişimcisi içerebilir:

public interface ISomeInterface
{
    int TestProperty
    {
        // No access modifier allowed here
        // because this is an interface.
        get;
    }
}

public class TestClass : ISomeInterface
{
    public int TestProperty
    {
        // Cannot use access modifier here because
        // this is an interface implementation.
        get { return 10; }

        // Interface property does not have set accessor,
        // so access modifier is allowed.
        protected set { }
    }
}

Erişeninin erişilebilirlik etki alanı

Erişimci üzerinde erişimci değiştiricisi kullanırsanız, Erişilebilirlik etki alanı erişimcisine Bu değiştirici tarafından belirlenir.

Erişimci üzerinde erişimci değiştiricisi kullanmadıysanız erişeninin erişilebilirlik etki alanına erişilebilirlik düzeyini özellik veya dizin oluşturucusu tarafından belirlenir.

Örnek

Aşağıdaki örnek, üç sınıfları içerir BaseClass, DerivedClass, ve MainClass.Var olan iki özellik BaseClass, Name ve Id her iki sınıfları.Örnek gösterir nasıl özelliği Id , DerivedClass özelliği tarafından gizli Id üzerinde BaseClass kullandığınızda bir sınırlayıcı bir erişim değiştiricisi gibi korumalı veya özel.Bu nedenle, ne zaman atamak için bu özelliği, özellik değerleri üzerinde BaseClass sınıfı yerine denir.Erişim değiştiricisi ile değiştirmeyi ortak özelliği erişilebilir hale getirir.

Örnek de gösteren bir sınırlayıcı bir erişim değiştiricisi gibi private veya protected, set erişimcisine Name özelliğinde DerivedClass erişimci erişimi engeller ve kendisine atarken bir hata üretir.

public class BaseClass
{
    private string name = "Name-BaseClass";
    private string id = "ID-BaseClass";

    public string Name
    {
        get { return name; }
        set { }
    }

    public string Id
    {
        get { return id; }
        set { }
    }
}

public class DerivedClass : BaseClass
{
    private string name = "Name-DerivedClass";
    private string id = "ID-DerivedClass";

    new public string Name
    {
        get
        {
            return name;
        }

        // Using "protected" would make the set accessor not accessible. 
        set
        {
            name = value;
        }
    }

    // Using private on the following property hides it in the Main Class.
    // Any assignment to the property will use Id in BaseClass.
    new private string Id
    {
        get
        {
            return id;
        }
        set
        {
            id = value;
        }
    }
}

class MainClass
{
    static void Main()
    {
        BaseClass b1 = new BaseClass();
        DerivedClass d1 = new DerivedClass();

        b1.Name = "Mary";
        d1.Name = "John";

        b1.Id = "Mary123";
        d1.Id = "John123";  // The BaseClass.Id property is called.

        System.Console.WriteLine("Base: {0}, {1}", b1.Name, b1.Id);
        System.Console.WriteLine("Derived: {0}, {1}", d1.Name, d1.Id);

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
    Base: Name-BaseClass, ID-BaseClass
    Derived: John, ID-BaseClass
*/

Comments

Bildirim değiştirirseniz dikkat new private string Id tarafından new public string Id, çıktı alın:

Name and ID in the base class: Name-BaseClass, ID-BaseClass

Name and ID in the derived class: John, John123

Ayrıca bkz.

Başvuru

Özellikler (C# Programlama Kılavuzu)

Dizinleyiciler (C# Programlama Kılavuzu)

Erişim değiştiricileri (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu