Sdílet prostřednictvím


Omezení přístupnosti přistupujícího objektu (Průvodce programováním v C#)

Získat a set se nazývají části vlastnost nebo indexovací člen přístupové objekty.Ve výchozím nastavení jsou tyto přístupové objekty mají stejné viditelnost nebo úroveň přístupu: po vlastnost nebo indexovací člen, k němuž náležejí.Další informace naleznete v tématu usnadnění úrovně.Někdy je však vhodné omezit přístup k jedné z těchto přístupových objektů.Obvykle to znamená omezení přístupnosti set přístupový objekt při vedení get přístupový objekt veřejně přístupné.Příklad:

private string name = "Hello";

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

V tomto příkladu vlastnost nazvanou Name definuje get a set přístupový objekt.get Obdrží přístupový objekt usnadnění úroveň vlastnosti, public v tomto případě při set přístupový objekt je výslovně omezeno použitím chráněné modifikátor přístupu k mechanismu přístupu, sám.

Omezení modifikátory přístupu pro přístupové objekty

Modifikátory přístupu pomocí vlastnosti nebo indexování se vztahují tyto podmínky:

  • Modifikátory přístupový objekt nelze použít v rozhraní nebo explicitní rozhraní člen provádění.

  • Modifikátory přístupový objekt můžete použít pouze v případě, že vlastnost nebo indexovací člen má jak set a get přístupové objekty.V tomto případě je přípustná na modifikátor, na jedné ze dvou přístupových objektů.

  • Pokud má vlastnost nebo indexovací člen Přepsat , modifikátor, přístupový modifikátor musí odpovídat přístupový objekt Potlačené přístupový, pokud existuje.

  • Úroveň usnadnění na přístupový objekt musí být více omezující než úroveň usnadnění na vlastnost nebo indexovací člen sám.

Modifikátory přístupu pro potlačení přístupové objekty

Když potlačíte vlastnost nebo indexovací člen musí být přístupný kód převažující Potlačené přístupové objekty.Také úroveň usnadnění jak vlastnost nebo indexování a který přístupové objekty musí odpovídat Potlačené odpovídající vlastnost/indexování a přístupové objekty.Příklad:

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; }
    }
}

Implementace rozhraní

Použijete-li implementovat rozhraní objektu, nemusí mít přístupový modifikátor přístupu nastaven.Ale pokud implementovat rozhraní jeden přístupový objekt, například pomocí get, ostatní přístupový objekt může mít modifikátor přístupu nastaven, jako v následujícím příkladu:

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 { }
    }
}

Přístupový objekt usnadnění domény

Používáte-li modifikátor přístupu nastaven přístupový objekt, usnadnění domény přístupový objekt je určen tento modifikátor.

Nepoužili jste modifikátor přístupu nastaven na přístupový objekt, usnadnění doménu přístupový objekt určen úroveň usnadnění vlastnost nebo indexovací člen.

Příklad

Následující příklad obsahuje tři třídy BaseClass, DerivedClass, a MainClass.Existují dvě vlastnosti na BaseClass, Name a Id na obou tříd.Příklad ukazuje jak vlastnost Id na DerivedClass lze skrýt vlastnost Id na BaseClass při použití modifikátoru omezující přístup jako chráněné nebo soukromé.Proto při přiřazení hodnoty k vlastnosti, vlastnosti na BaseClass třída se nazývá místo.Nahrazení modifikátor přístupu podle veřejné zpřístupní vlastnost.

Příklad také ukazuje, že omezující přístup modifikátor, například private nebo protected, set přístupový objekt Name vlastnost v DerivedClass zabraňuje přístupu k přístupový objekt a generuje chybu, můžete přiřadit.

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
*/

Komentáře

Všimněte si, že nahradit prohlášení new private string Id podle new public string Id, získat výstup:

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

Name and ID in the derived class: John, John123

Viz také

Referenční dokumentace

Vlastnosti (Průvodce programováním v C#)

Indexery (Průvodce programováním v C#)

Modifikátory přístupu (Průvodce programováním v C#)

Koncepty

Průvodce programováním v C#