C#中的属性、和字段的区别
C#中的属性、和字段的区别
C#中的属性、和字段的区别在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。
属性由以下几部分构成:
1:私有字段,用来存储变量(后备存储),这个字段之所以是私有的,是为了让它只能通过属性来赋值。
2:一个get访问器,它负责读取数据,用于返回字段值或者是用于计算并返回字段值。以return或者是throw语句终止。其中可以包含些简单的逻辑处理,例如数据验证等等。
3:一个set访问器,负责给属性赋值,类似于一个返回类型为void的方法,可以包含逻辑处理,例如可以根据默认的值通过计算后返回结果。
属性分类:
1:按访问修饰符来分:可将属性标记为 public、private、protected、internal 或 protected internal。这些访问修饰符定义类的用户如何才能访问属性。
2:属性还可以标记成,静态属性,实例属性,虚属性,抽象属性,需要注意的是,如果属性已经标记成静态(static ) 的,那么后面不能和虚(virtual),抽象(abstract),重写(override)混用。
3:同一属性如果只包含get访问器,我们称之为只读属性,如果只包含set访问器,叫可写属性,如果即有get, 又有set访问器,我们叫可读可写属性。
1、读/写属性
读/写属性是一个具有get()和set()访问器的属性.
语法: [访问修饰符] 数据类型 属性
{
get{ };
set{ };
}
2、只读属性
仅具有get()访问器属性称为只读属性.
语法: [访问修饰符] 数据类型 属性名
{
get{ };
}
3、只写属性
仅具有set()访问器属性称为只写属性,不推荐使用只写属性.
语法: [访问修饰符] 数据类型 属性名
{
set{ };
}
属性的定义实例:
public string sName
{
get;
set;
}
private string name;
public string Name
{
get{return name;}
set{ name=value;}
}
属性、和字段的区别
相同点:
都是类的成员,属性是类的属性,而字段是类色数据成员
不同点:
1 属性可进行数据绑定
2 属性可通过set和get方法进行数据安全性检验,而字段不行
3 属性可进行线程同步
public string Name
{
set{
lock(this)
{
}
}
}
4 属性可以是抽象的,而字段不行
5 属性可以接口的形式表现
6 基于属性的索引
7 不要直接把字段转化为属性
8 字段在值的处理上并不是那么的灵活,给它赋什么它就是什么,不允许经过逻辑处理。如果把一个人的身高写成一个字段,给它赋值1000M,这显示是不正常的数据,字段无法处理这种特殊数据。
9 与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref参数或 out参数传递。
- c#中SqlBulkCopy的使用
- c#操作XML文件的通用方法
- C#快速排序
- C#中ArrayList与Array的区别
- C#中is、as的区别
- C#中SortedList的用法
- C#中的base和this关键字
- C# Windows服务的创建、安装、调试
- C#中属性的用法
- c# Invoke和BeginInvoke 区别
- C# Checklistbox的用法
- C#正则表达式Regex类的用法
- C#中float的取值范围和精度
- C#中的反射
- c# 协变和逆变
- 安装C# Windows服务需要“设置服务登录”
- 车友的选择| 轮毂该如何选(车友的选择轮毂该如何选)
- 秦海璐炫耀和王新军热恋蜜事,不料对方吐槽她吃饱后肚子撅老高(秦海璐炫耀和王新军热恋蜜事)
- 秦海璐一袭旗袍惹人倾心,将高级与淡雅展现的游刃有余(秦海璐一袭旗袍惹人倾心)
- 门外之见 海蛎子味 的表演,能走多远(门外之见海蛎子味)
- 三部冷门谍战剧,第一部2014年拍摄,至今还未播出(三部冷门谍战剧)
- 《金陵秘事》的剧情跌宕起伏 给观众带来的怎样的感官体验(金陵秘事的剧情跌宕起伏)
热门推荐
- mysql 查询语句group by用法(MySQL group by和order by如何一起使用)
- angular怎么把组件用在根组件里(详解Angular组件之投影)
- 织梦的控制层使用方法(织梦系统参数设置出现Token mismatch!提示的解决办法)
- laravel验证码依赖(laravel5.2表单验证,并显示错误信息的实例)
- 宝塔面板防火墙是自动开的吗(宝塔面板开启隐藏的 waf 防火墙的方法)
- python学生信息管理系统教程(学生信息管理系统Python面向对象版)
- sparksql的string转日期格式(将string类型的数据类型转换为spark rdd时报错的解决方法)
- docker配置文件详解(Docker中搭建FastDFS文件系统多图教程)
- mysql导出数据的方法
- mysqlsql按日期统计(sqlserver/mysql按天、按小时、按分钟统计连续时间段数据推荐)