从0开始学C#-part9.属性详解

13. 属性详解

属性是字段和方法的交集,看起来像字段,用起来像方法。访问属性所用的语法和访问字段一样

光看这一段其实毫无感觉,而且其实我看了很多实际项目代码里面也比较难找到有使用属性的,可能在大型工程里面会经常使用这个特性,属性也是封装的手段,我们还是认真学习一下。
封装原则意味着数据都要保持私有private状态,如果不是私有,则在class以外也可以随意读取数据,造成数据出错。
我们来看看使用属性后会有什么帮助。
假设有两个变量_x,_y(一般使用属性时,变量名前面最好加个_)

public class cls
{
private int _x, _y;
public int X //属性名X
{ 
  get{return this._x;}  //注意;号在中括号里面
  set{this._x = value;}
}
  
public int Y //属性名Y
{ 
  get{return this._y;}  //get为取值访问器 
  set{this._y = value;} //set为赋值访问器
}
}

好了,那如何用属性来赋值或取值呢?

cls class1 = new cls();
int x1 = class1.X;  //实际调用了class1.X.get
int y1 = class1.Y;

class1.X = 40; //实际调用了class1.Y.set
class1.Y = 100;

也可以只写set或只写get,这样属性只读或者只写

  • 如果属性只读(即只写了get),如果给它赋值则会编译错误
  • 如果属性只写(即只写了set),如果取值则会编译错误
    只写属性可以用于密码应用
    在实际使用时,可以直接写空的属性,节省时间
class Circle
{
  public int Radius{get;set;}  //注意有两个分号
  ...
}

其他什么都不用做,但是编译器会自动帮你生成一个私有字段_radius,要使用的时候直接用Circle.Radius即可。

使用属性初始化对象

在创建类的实例时,可以为具有set访问器的任何公共属性指定名称和值

举个例子来帮助理解:一个类里定义了3个属性,可以用一个默认构造器初始化3个属性的值,之后在初始化对象时,直接改写3个属性的值,即可完成初始化。

class Polygon
    {
        public int NumSides { get; set; }
        public double SideLength { get; set; }

        public Polygon()
        {
            this.NumSides = 4;
            this.SideLength = 10.0;
        }
	}
Polygon square = new Polygon();  //使用默认构造器,则两个值不修改
Polygon triangle = new Polygon { NumSides = 3 };  //将NumSides重载为3,SideLength不修改
Polygon pentagon = new Polygon { SideLength = 15.5, NumSides = 5 };  //两个值均修改

这样看来,属性还是蛮方便的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值