C#属性与字段

一.字段:

字段是储存类要满足其设计所需要的数据,是与类相关的变量。

二.属性:

1.在C#中可以自由的、毫无限制的访问公有字段,但在一些场合中,我们需要只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性。

2.属性有两个方法:get和set。

get访问器返回与声明的属性相同的数据类型,表示的意思是调用时可以得到内部字段的值或引用;

set访问器没有显示设置参数,但它有一个隐式参数,用关键字value表示,它的作用是调用属性时可以给内部的字段或引用赋值。

简单说就是get块负责属性的读取工作,set块负责属性的写入工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。

下面通过一个例子来加深理解:

 class Product //商品类
    {
        //私有字段
        private string pname;   //商品名称
        private float price;       //商品单价
        private int pcount;      //商品数量

        //属性
          //可读写
        public string Pname
        {
            get { return pname; }
            set { pname = value; }
        }
          //可检测赋值是否正确
        public float Price
        {
            set
            {
                if (value >= 0)
                    price = value;
                else
                    throw new Exception("商品价格不正确");
            }
            get
            {
                return price;
            }
        }
    }

三.属性与字段的联系:

属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,它的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品,使得在保证封装性的基础上实现了访问私有成员的便捷性。属性和字段都是类的成员。

当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。

四.属性与字段的区别:

1.通常字段都是private,即私有的变量;而属性都是public,即公有的变量。

2.字段的名称一般首字母小写或前加“_”; 属性的名称一般首字母大写。

3.属性可以是抽象的,而字段要具有实际的意义。

4.属性是类提供给外部使用的,可以通过" 对象.属性" 设置或读取 一个值 ;字段是类内部用来存储数据的。

5.属性可以进行数据绑定,保证安全,但没有存储功能。

C#属性与字段,布布扣,bubuko.com

时间: 2024-10-25 17:03:11

C#属性与字段的相关文章

属性和字段的区别和联系

问题:C#语法中针对类中数据成员的访问引见的属性和字段概念和C++相比,C++中只要属性(觉得相当于于C#中的字段),但是在运用C#过程中,假入本人要写一个类,包含几个数据成员(即字段)但是为了让外边能够访问还需求写对应的属性出来,岂不是有点费事?使用属性的优点是什么? 在C#中,我们可以非常自由的.毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋值于某个范围.或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性

你知道属性(字段)与构造函数谁先执行吗?

你知道属性(字段)与构造函数谁先执行吗?    最近一直在马不停蹄的做开发,正所谓学而不思则罔,思而不学则殆,开发过程中其实学到了好多,也发现了好多,但是有时候会因为某些原因没能深入探讨和研究,而只是想当然的处理,今天突然闲心泛滥,想研究下一个类中属性与构造函数到底哪个先执行,执行顺序策略是怎样的?这个问题其实已经困扰我好久,因为有些整个类中需要使用的一下对象,我有时候喜欢直接在声明的时候就进行实例化,但是这样真的好吗?会不会影响到速度.性能之类的问题?我看过一些别人的代码,总之,有的将实例化对

C#创建对象时各种初始化属性、字段的方式的执行顺序

创建对象代码如下: new FilterInfo(Student.CreateTimeProperty,"朱七",Express.Equals,Relationship.Or) { Field = Student.CreateTimeProperty, Value = "朱6", Express = Express.Equals, Relationship = Relationship.Or } 而在FilterInfo的定义中属性public Relationsh

属性与字段的区别

本文转载自NetLYF 首先从两者的声明上来看,公共字段只是类用public修饰符所公开的简单公共变量,而属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值. 由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的.所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧). 公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,

C#中的属性和字段

属性和字段的区别 在C#中,我们可以自由的访问公有字段,但在一些场合中,我们可能希望限制字段的赋值范围.或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些字段值,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作. get和set 有两个类person: public class person { public string name; } public class person { public st

C# 属性和字段的区别

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

C#网络应用编程 类,构造函数,方法,属性和字段

1.类定义形式: public(private) class(类) apple(类名)备 注: public 不限制访问 private 访问限于本类 2.构造函数 定义形式:是一种特殊的方法.public 类名 (参数表){}作 用:主要用来在创建对象时初始化对象,即为对象成员变量赋予初始值,总与new运算符一起使用在穿件对象的语句中. 2.方法定义形式:public void(所定义方法类型) send(方法名)(参数){ }备 注:方法可以是静态的或是非静态的.通过类访问静态方法,通过累的

Django中ORM模型总结(二)[模型类的对应关系,模型类的属性,字段类型]

模型类的对应关系 多对多 创建模型类----->新闻类型类 class TypeInfo(models.Model): """创建新闻模型类""" tname = models.CharField(max_length=20) 创建模型类----->新闻内容类 class NewInfo(models.Model): """闯将新闻内容类""" ntitle = models

属性和字段

在做题时,我一直在想字段的属性到底有什么不同,功能都基本一样,但是后来网上查了查,原来类成员包括变量和方法,如果希望其他类能够访问成员变量的值,就必须定义成公有的,而将变量设为公有public,那这个成员变量的就可以被任意访问(包括修改,读取),这样不利于数据安全. C#通过属性特性读取和写入字段(成员变量),而不直接直接读取和写入,以此来提供对类中字段的保护.属性可用于类内部封装字段.属性是C#面向对象技术中封装性的体现. 属性和字段的区别: 属性是逻辑字段,是字段的扩展,并不占用实际的内存: