属性(Properties)和字段在C#中的关系

主题:这篇文章我来说下属性(Properties)和字段在C#中的关系。首先申明一下,这里讲的属性就是通 常说的包含get,或者是set访问器的属性,不是属性 (Attribute)。我们写程序的时候大多都会用到实体 类,而生成实体类,我们都会申明一些常规属性或者是自动实现的属性。至于到底选用哪一种属性,或者 说是否可以直接用字段代替呢?

常规属性和自动实现属性的区别:

一个完整的常规属性由以下几部分构成:

1:私有字段,用来存储变量(后备存储),这个字段之所以是私有的,是为了让它只能通过属性来赋值 。

private string _sName;

2:一个get访问器,它负责读取数据,用于返回字段值或者是用于计算并返回字段值。以return或者 是throw语句终止。其中可以包含些简单的逻辑处理,例如数据验证等等。

get
            {
                //电脑价格,如果小于零,则返回0,说明数据不正常
                return _computerPrice >= 0 ? _computerPrice :  0;
            }

说明:get访问器是读取数据,所有不要在代码块中修改属性状态。下面的代码是不被推荐的。

private string _sName;
public string sName
{
  get
  {return (_sName+"");}
}

3:一个set访问器,负责给属性赋值,类似于一个返回类型为void的方法,可以包含逻辑处理,例如可 以根据默认的值通过计算后返回结果。

常规属性分类:

1:按访问修饰符来分:可将属性标记为 public、private、protected、internal 或 protected internal。这些访问修饰符定义类的用户如何才能访问属性。

2:属性还可以标记成,静态属性,实例属性,虚属性,抽象属性,需要注意的是,如果属性已经标记 成静态(static ) 的,那么后面不能和虚(virtual),抽象(abstract),重写(override)混用。

3:同一属性如果只包含get访问器,我们称之为只读属性,如果只包含set访问器,叫可写属性,如果 即有get, 又有set访问器,我们叫可读可写属性。

什么是自动实现的属性?

当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明变得更加简洁。当您如下面的示例 所示声明属性时,编译器将创建一个私有的匿名后备字段,该字段只能通过属性的 get 和 set 访问器进 行访问。

public string sName
        {
            get;
            set;
        }

时间: 2024-11-01 03:17:52

属性(Properties)和字段在C#中的关系的相关文章

(原创)从CLOB字段的XML中提取关系数据研究

从CLOB字段的XML中提取关系数据研究本文中用以下函数:extract.extractvalue.existsnode.xmlsequence.xmltype.Xmltable.XMLQuery,函数的具体的语法在此不作描述.在提取数据之前先要把CLOB数据用xmltype函数据转换为XML数据.1.XML中的数据是单表且只一行数据.这种情况很简单且速度很快.示例如下:SELECT  extractvalue(v_msg,'/gpdic_xml/route_detail_infos/route

为什么数据库中同一个关系表中的属性名是不能重名的,不同的关系表中的属性名是可以重?能举个例子吗?

问题描述 为什么数据库中同一个关系表中的属性名是不能重名的,不同的关系表中的属性名是可以重?能举个例子吗? 为什么数据库中同一个关系表中的属性名是不能重名的,不同的关系表中的属性名是可以重?能举个例子吗? 解决方案 比如 三张表:学生(学号,姓名),课程(课程名,课程编号),选课(学号,课程号,成绩) 学生表中不能有都叫学号的属性名,比如学生(学号,学号)就是有问题的,表里无法区分这两个学号,也就是同一个关系表中的属性名是不能重名的 学生表和选课表就都能有学号属性,也就是不同的关系表中的属性名是

asp.net水晶报表参数字段在代码中赋值的方法

  本文实例讲述了asp.net水晶报表参数字段在代码中赋值的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 // 声明将参数传递给查看器控件所需的变量. ParameterFields paramFields = new ParameterFields (); ParameterField paramField = new Parameter

hibernate-Oracle数据库中新增一个字段,Hibernate中映射怎样加?

问题描述 Oracle数据库中新增一个字段,Hibernate中映射怎样加? 问题:我在oracle数据库中新增一个字段,那么在Hibernate映射中,需要手动加进去吗?在中. 谢谢!! 解决方案 类似这样,第一个name对应实体中,第二个name对应数据库 解决方案二:

在.NET C#中如何选择输出SQL数据库字段到EXCL中

问题描述 在.NETC#中如何选择输出SQL数据库字段到EXCL中 解决方案 解决方案二:通过设置字段是否可见,再查询可见字段,导出数据到dataset里,再导出到excel里解决方案三:能说详细点吗,或者举个例子,我水平不行.解决方案四:查询出你所要的字段到数据集中,再导入到EXCEL

C#上传excel文档,设定好固定的格式内容,将内容字段插入数据库中,怎么实现

问题描述 C#上传excel文档,设定好固定的格式内容,将内容字段插入数据库中,怎么实现,例如表头楼号.单元号.房间号.上传exce表并将对应的字段插入已经设定好的3个表中,例如tb_building.tb_unit.tb_room表中的每个相应的字段 解决方案 解决方案二:关注,顶你,我也想知道解决方案三:额,不多说了,偷个懒你自己google"sql导入导出大全"你这个就是其中滴excel导入到mssql那项解决方案四:这个你先通过操作excel的方法获取excel表内的每行数据,

asp.net水晶报表参数字段在代码中赋值的方法_实用技巧

本文实例讲述了asp.net水晶报表参数字段在代码中赋值的方法.分享给大家供大家参考.具体实现方法如下: // 声明将参数传递给查看器控件所需的变量. ParameterFields paramFields = new ParameterFields (); ParameterField paramField = new ParameterField (); ParameterDiscreteValue discreteVal = new ParameterDiscreteValue (); P

c# 接口 类-C# 类中包含一个接口属性的意义,在ArcEngine中经常遇到

问题描述 C# 类中包含一个接口属性的意义,在ArcEngine中经常遇到 请教各位,如果一个类中含有一个接口属性,那么是否意味着这个类实现了该接口,如果没有实现,那么包含一个接口属性有什么意义

输入字段名 查询表中是否存在该字段名?

问题描述 输入字段名查询表中是否存在该字段名?用c#如何编写程序啊最好写在类里 解决方案 解决方案二:try{sql="SELECT字段FROM表";conn.ExcuteNonQuery();}catch(sqlExceptionexp){//没有字段就会出异常的} 解决方案三:selectname,object_name(id)fromsyscolumns解决方案四:所有的表名,字段名,存储过程名,Index名,都可以在数据库中查到,涉及到几个系统表,比如SysColumns,Sy