logo search
CSharp_Prog_Guide

Домен доступности к методу доступа

При использовании модификатора доступа в методе доступа, этот модификатор определяет домен доступности метода доступа.

Если модификатор доступа в методе доступа не используется, домен доступности метода доступа определяется уровнем доступности свойства или индексатора.

Пример

В следующем примере содержатся три класса: BaseClass, DerivedClass и MainClass. В BaseClass, Name и Id для обоих классов имеется два свойства. Пример демонстрирует, как свойство Id в DerivedClass может быть скрыто свойством Id класса BaseClass, если используется ограничивающий модификатор доступа, такой как protected или private. Таким образом, при присвоении значений этому свойству, вместо этого вызывается свойство BaseClass. Замена модификатора доступа модификатором public сделает свойство доступным.

Пример также демонстрирует, что ограничивающий модификатор доступа, такой как private или protected, в методе доступа set свойства Name в DerivedClass запрещает доступ к методу доступа и создает ошибку при его присвоении.

----

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

}

}

-----

Output

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

Name and ID in the derived class: John, ID-BaseClass

Comments

Notice that if you replace the declaration new private string Id by new public string Id, you get the output:

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

Name and ID in the derived class: John, John123