c#中的属性
在C#中我们可以很自由的访问共有字段,但有时我们可能需要某字段只能读或者写,或在改变字段值得时候做一些其他事情,显然这些仅仅依靠字段是无法实现的,于是便有了属性。
1、基本用法
c#中的属性由属性作用域中定义的get作用域(访问方法)和set作用域(访问方法)构成。
class Test
{
private int number; //int表示该属性所封装的数据类型
//数据类型必须与相应的字段(number)相同
public int Num
{
get{return number;}
set{number=value;}
}
}
当封装数据时,可能希望配置一个只读属性。为此,可以忽略set块。类似,如果想拥有一个只读属性,就忽略get块。
2、静态属性
C#静态属性可以是读写属性,只读属性,只写属性中的任意一种。静态访问器适用于整个类,而不是类的实例。静态属性中的set,get访问器只能访问类的静态成员。静态属性可以通过类名访问,不能使用实例调用,这与静态方法相同。
//简单的储蓄账户类
class SavingAccount
{
//实例级别的数据
public double currBalance; //静态数据点
private static double currInterestRate = 0.04; //静态属性
public static double InterestRate
{
get{return currInterestRate;}
set{currInterestRate=value;}
}
}
3、自动属性
自动属性可以简化封装数据字段的过程,减轻了定义私有返回字段和相关c#属性成员的工作。在定义自动属性时,只指定访问修饰符、实际的数据类型、属性名称和空的get/set作用域。在编译时,编译器为类型自动生成了私有返回字段和适当的get/set实现逻辑。
class Enemy
{
//自动属性
public string Name{get;set;}
public int Life{get;set;}
public float Attack{get;set;} }
注意:与传统的属性不同的是,不允许构建只读或只写的自动属性,自动属性定义是必须同时支持读写功能。但是定义更严格的get或set是可以的
4、关于自动属性和默认值
可以直接在代码中使用封装了数字或布尔数据的自动属性,因为隐藏的返回字段将设置一个可以直接使用的安全的默认值。但如果自动属性封装了另一个类变量,隐藏的私有引用类型的默认值将设为null。
例如下面的类spawn,使用了两个自动属性
class Spawn
{
//隐藏的int字段默认值为0
public int numbers{get;set;}
//隐藏的Enemy返回字段为null
public Enemy MyEnemy{get;set;}
}
当直接调用MyEnemy时,将会在运行时得到空引用异常,因为没有为后台使用的Enemy成员变量设置新的对象。
由于私有的返回字段是在编译时创建的,所以不能直接使用new关键字直接分配引用类型,必须在类的构造函数内部执行,以确保对象以安全方式诞生。
class Spawn
{
//隐藏的int字段默认值为0
public int numbers{get;set;}
//隐藏的Enemy返回字段为null
public Enemy MyEnemy{get;set;} //必须用构造函数重写分配给隐藏返回字段的默认值
public Spawn()
{
MyEnemy = new Enemy();
numbers = ;
} public Spawn(Enemy enemy, int num)
{
MyEnemy = enemy;
numbers = num;
}
}
c#中的属性的更多相关文章
- Objective-C中的属性机制
Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现.在学习OC中属性之前我们先要知道为什么要为变量实现gett ...
- Javascript中prototype属性详解
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- 转载:java 中对类中的属性使用set/get方法的意义和用法
经常看到有朋友提到类似:对类中的属性使用set/get方法的作用?理论的回答当然是封闭性之类的,但是这样对我们有什么作用呢?为什么要这样设计?我直接使用属性名来访问不是更直接,代码更简洁明了吗?下面我 ...
- DTD中的属性类型
<![CDATA[文本内容]]> DTD中的属性类型 全名:character data 在标记CDATA下,所有的标记.实体引用都被忽略,而被XML处理程序一视同仁地当做字符数据看待, ...
- java-读取类中的属性名称和值
方法 /** * 获取类中的所有属性明名称和值(因涉及到可能会是继承关系的父类,所以从f中去属性名称,从f2中取值,两个可以一样,也可以使父类) * @param f:读取属性类(如果取父类的,则这里 ...
- 深入理解css中position属性及z-index属性
深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共 ...
- 深入理解JavaScript中的属性和特性
深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...
- 使用angularjs定义html中的属性ng-attr-(suffix)
html中的属性很多,同样可以使用angularjs来定义: ng-attr-(suffix)=只能使用变量定义 <div title="angularjs中的title"& ...
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- XCODE UITextField 中的属性和用法
XCODE UITextField 中的属性和用法 一些基本的用法 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedR ...
随机推荐
- filter与servlet对照
最近在开java物自,还记得刚开始使用servlet这是一个调试ajax什么时候,然后,我不知道怎么用,你知道写的路径来调用,总是提示404错,,到最后自己一点点的调通了,知道servlet是须要se ...
- 使用注解实现 bean 转 csv
csv 文件是 aaa,bbb,ccc aaa,bbb,ccc 保存 这里的要求是 List<T> 线性表的类型 转换成 类别似 html 中 table的格式,即第一行是 head 后面 ...
- MVC数据验证使用小结
原文:MVC数据验证使用小结 描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近 ...
- poj3237(树链剖分)
题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...
- Struts2 开发环境搭建
一.开发环境 eclipse+tomcat+struts-2.2.3 eclipse下载地址:http://www.eclipse.org/downloads/ tomca ...
- String ,StringBuffer,StringBuilder精髓比較
1. 在运行速度方面的比較:StringBuilder > StringBuffer > String 2. StringBuffer与StringBuilder.他们是字符串变量,是可改 ...
- hdu 3790 (最短路径问题dijkstra)
主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...
- Nagios+pnp4nagios+rrdtool 安装配置nagios被监控端NRPE配置(二)
NRPE监控插件基础 NRPE总共由两部分组成: (1).check_nrpe插件,运行在监控主机上. (2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机) 整个的监控过程 ...
- WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
- devstack安装使用openstack常见问题与解决的方法
声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结.如有雷同,实属荣幸! 安装执行create-sta ...