属性和字段的区别和联系

属性和字段的区别和联系

问题:C#语法中针对类中数据成员的访问引见的属性和字段概念和C++相比,C++中只要属性(觉得相当于于C#中的字段),但是在运用C#过程中,假入本人要写一个类,包含几个数据成员(即字段)但是为了让外边能够访问还需求写对应的属性出来,岂不是有点费事?使用属性的优点是什么?

在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋值于某个范围、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个模块:set和get,set模块负责属性的写入工作,get模块负责属性的读取工作。在两个模块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。

class Product   //商品类

   {

       //私有字段

       private string_Pname;   //商品名称

       private bool_IsNoEmperty;    //是否有库存

       private float_Price;     //商品单价

       private int_PCount;      //商品数量

       //属性:

       //可读写

       public stringPname

       {

            set{ _Pname = value; }

            get{ return _Pname; }

       }

       //只读

       public boolIsNoEmperty

       {

            get{ return _IsNoEmperty; }

       }

       //可检测赋值是否正确

       public floatPrice

       {

            set

            {

                if(value >= 0)

                    _Price = value;

                else

                    thrownew Exception("Price的赋值范围");

            }

            get

            {

                return_Price;

            }

       }

       //赋值时更改其他状态

       public intPCount

       {

            set

           {

                _PCount = value;

                _IsNoEmperty = true;   //改变了_IsNoEmperty字段的值

            }

            get{ return _PCount; }

       }

       public voidPrint()

       {

            Console.WriteLine("产品信息如下:");

            Console.WriteLine("产品名称:{0}",_Pname);

            Console.WriteLine("产品价格:{0}", _Price);

            Console.WriteLine("库存数量:{0}", _PCount);

Console.ReadLine();

       }

       static voidMain(string[]args)

       {

            ProductP1=new Product();

            P1.Pname="黑人牙膏(克)";

            P1.Price=5;

            P1.PCount=20;

            P1.Print();

       }

小结:引入属性的优点

1.维护私有字段(保证类的封装性)

2.可控制访问(只读/只写,确保赋值的正确性等)

3.不用注重细节(直接使用,不需要考虑复杂的处理代码)

至于引入属性的益处在更多的c#程序中会领会的愈加深入

问题:什么情况下选择使用字段还是属性?

从例子中可看到属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,他的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品。因而当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。

这是C#中的属性

public string UserName
{
get { return this._username; }
set { this._username = value; }
}

通俗来讲..get是获取值 set是设置值


比如这句:get {return this._username; }
如果调用这个get方法就能获得方法return this._username(返回的值
)
调用方法:Console.Write(对象.UserName);(输出该属性的值
)

比如这句
:set {this._username = value; }
如果调用这个set方法就可以重新设置username的值 value就是你新设置的值

调用方法:对象.UserName="新值";(为该属性附新值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值