- get 属性访问器用于返回属性值,而 set 访问器用于分配新值。这些访问器可以具有不同的访问级别。
- value 关键字用于定义由 set 访问器分配的值。
- 仅当属性或索引器同时具有 set 和 get 访问器时,才能使用访问器修饰符。这种情况下,只允许对其中一个访问器使用修饰符。
- 如果对访问器使用访问某个修饰符,则访问器的可访问性域由该修饰符确定。
- 如果不对访问器使用访问修饰符,则访问器的可访问性域由属性或索引器的可访问性级别确定。
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
*/
当访问派生类DerivedClass中的Name成员时,由于DerivedClass中Name方法是public的,所以能够直接使用get方法;
当访问Id成员时,由于DerivedClass中Id方法是private的,所以会调用基类中的Id方法。
则会输出如下:
Base: Name-BaseClass, ID-BaseClass
Derived: John, ID-BaseClass
当修改DerivedClass中Name方法为限制类型时,同样会调用基类中的Name方法。
输出如下:
Base: Name-BaseClass, ID-BaseClass
Derived: Name-BaseClass, ID-BaseClass