C#中的属性
属性是代表类的实例或类中的⼀个数据项的成员。属性指的是⼀组两个匹配的、称为访问器的⽅法:
public  返回类型标识符
{
set 访问器为属性赋值
get 访问器为属性获取值
}
set访问器总是:
get访问器总是:
属性跟字段的相同点:
属性跟字段的不相同点:
访问器的重点如下:
使⽤属性
写⼊和读取属性的访问器时,会被隐式调⽤:
注意: 不能显式地调⽤访问器,就跟调⽤函数那样, 会出现编译错误。
namespace Ch05Ex03
{
class D  // 属性本⾝不分配内存
{
private double name = 3.14;  // 为字段分配内存
public double MyValue
{
set
{
name = value; //返回类型为void
}
get
{
return name;  // 返回类型是属性的类型,属性的类型也要跟字段的数据类型⼀致            }
}
}
class Program
{
static void Main(string[] args)
{
D myD = new D();
myD.MyValue = 5.666;  //给访问器中的字段赋值
WriteLine(myD.MyValue);  //输出赋值后的字段的值
var tmp = myD.MyValue;
WriteLine(tmp);  //输出赋值后的字段的值
var tt = (); // 错误,不能这样显式调⽤
myD.set(5.3); // 错误,不能这样显式调⽤
ReadKey();
}
}
}
我们经常将类中的字段声明private以封装该字段, 然后声明⼀个public的属性来控制从类的外部对该字段的访问。和属性关联的字段称为后备字段或后备存储。
属性和后备字段需要注意的问题有:
private  double nameField = 3.14; //第⼀种约定
public double NameFild
{
set
{
nameField = value;
}
get
{
return nameField;
}
}
private  double _nameField = 3.14;  // 第⼆种约定
public double NameFild
{
set
{
_nameField = value;
}
get
{
return _nameField;
}
}
利⽤ set 和 get  访问器执⾏其它运算
属性访问器不仅仅只可以对关联的字段传⼊传出数据, 还可以执⾏任何计算,或者不执⾏任何计算。但是get访问器必须返回⼀个属性类型的值。
下⾯看⼀个更有⽤的⽰例:
namespace Ch05Ex03
{
class D
{
private  double _nameField = 3.14;
public double NameFild
{
set
{
_nameField = value > 100 ? 100 : value;  //执⾏计算
writeline特点
}
get
{
return _nameField;
}
}
}
class Program
{
static void Main(string[] args)
{
D myD = new D();
myD.NameFild = 200;  //给访问器中的字段赋值
WriteLine(myD.NameFild);  //输出赋值后的字段的值
ReadKey();
}
}
}
只读和只写属性
使⽤属性⽐使⽤公共字段更好
属性⽐公共字段更好,理由如下:
⾃动实现属性
⾃动实现属性: 允许只声明属性⽽不声明后备字段。 编译器会为你创建隐藏的后备字段, 并且⾃动挂接到get 和 set 访问器上。
⾃动实现属性的要点如下:
namespace Ch05Ex03
{
class D
{
public double NameFild  //分配内存
{
set;get;
}
}
class Program
{
static void Main(string[] args)
{
D myD = new D();
myD.NameFild = 200;  //给访问器中的字段赋值
WriteLine(myD.NameFild);  //输出赋值后的字段的值
ReadKey();
}
}
}
除了⽅便之外,⾃动实现的属性还允许您轻松地插⼊⼀个属性,本来那⾥您可能想要声明⼀个公共字段的。静态属性
属性也可以声明为 static, 静态属性的访问器和所有静态成员⼀样,具有以下特点:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。