C#-之属性(2)
1. 属性结合字段和方法得多个方面,对于对象的用户来说,属性就像字段(这样就可以修改属性值或者访问),对于类的实现者来说,属性包括两个各部分get访问器(用于读取属性)和set访问器(用于设置属性),与字段不同的是属性不会当做变量,故不能够降属性作为ref和out参数传递。
public class Property
{
private int month = 1; //Backing store
public int Month
{
get
{
return month;
}
private int month = 1; //Backing store
public int Month
{
get
{
return month;
}
set
{
if ((value > 0) && (value < 13))
{
month = value;
}
{
if ((value > 0) && (value < 13))
{
month = value;
}
}
}
public void ShowMonth()
{
System.Console.WriteLine(month);
}
}
}
public void ShowMonth()
{
System.Console.WriteLine(month);
}
}
Property myPro = new Property();
myPro.ShowMonth();
myPro.ShowMonth();
myPro.Month = 12;
myPro.ShowMonth();
myPro.Month = 13;//修改属性值大于12后,则不会处理(属性set访问器已作出限制)
myPro.ShowMonth();
System.Console.ReadKey();
myPro.Month = 13;//修改属性值大于12后,则不会处理(属性set访问器已作出限制)
myPro.ShowMonth();
System.Console.ReadKey();
属性使用私有字段跟踪实际值。 属性的数据的实际位置通常被称为属性的“后备存储”。 属性 使用私有字段作为后备存储,这很常见。 将字段被标记为私有,确保只能通过调用属性来对其进行更改。
2. 示例演示如何访问由派生类中同名的另一属性隐藏的基类中的属性。
public class Employee
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public virtual void showBase()
{
System.Console.WriteLine(name);
}
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public virtual void showBase()
{
System.Console.WriteLine(name);
}
}
//有意(new)隐藏了基类中的属性
public class Manger: Employee
{
private string name;
public new string Name
{
get
{
return name;
}
{
get
{
return name;
}
set
{
name = value + ": manger";
}
}
public new void showBase()
{
System.Console.WriteLine(name);
}
}
}
{
name = value + ": manger";
}
}
public new void showBase()
{
System.Console.WriteLine(name);
}
}
}
//验证派生类如何隐藏基类中属性,注意和重写的区别,参考C#之隐藏与重写
Manger mag = new Manger();
mag.Name = "John";
mag.showBase();
((Employee)mag).Name = "Lucy";
((Employee)mag).showBase();
Manger mag = new Manger();
mag.Name = "John";
mag.showBase();
((Employee)mag).Name = "Lucy";
((Employee)mag).showBase();
结果:
John: manger
Lucy
Lucy