类中的属性
来源:互联网 发布:lego moc 搭建软件 编辑:程序博客网 时间:2024/06/08 15:39
属性的作用:
先看一个简单的作用
private string studentAge;public string StudentAge{ get { return studentAge; } set { if(studentAge>16)&&(studentAge<20)//判断是否是程序的要求 studentAge=value; else Console.WriteLine("不是指定的年龄范围!"); }}
属性是面向对象中的一个重要概念,首先还是先观察一下属性的写法特点:
属性由两大部分组成:私有字段、公有属性
属性部分包括 get 、set 两个特殊的方法,在这个两个方法中,get是返回对应私有变量的值,我们称为“获取属性值”,set是给对应的私有变量赋值,我们称为“给属性赋值”,并且这个值自动保存在value中,然后通过value个私有变量赋值的。通过调试程序的赋值和取值我们可以观察get和set的调用时机,
请大家观察下图,首先给get和set打上断点:
观察程序执行:
属性是外部调用字段的一个入口。
因为字段一般都是私有,私有字段外界是无法访问的,外界想访问私有字段,我们可以把这个字段封装一个属性
public 的字段与属性的区别
先看下面这个程序
Class student{ public int Age;}static void Main (string[] args){ student Student=new student(); Student.Age= -20; string strStudent =Stuent.Age; Console.WriteLine("This student age is:{0}",strStudent);}想想这样的结果会是什么呢?This student age is:-20 是不是这个学生在倒起活呢?所以属性对字段就有封装保护作用。
private string studentAge;public string StudentAge {get{return studentAge;}set { if(studentAge>16)&&(studentAge<20)//判断是否是程序的要求 studentAge=value; else Console.WriteLine("不是指定的年龄范围!"); }}
通过上面的示例,大家可以看出,显示这样的程序设计很不安全,这就是直接公开私有字段无法解决的问题。但是使用属性就能解决,因为属性给我们提供的get和set方法是可以在里面添加业务逻辑的,如下:
private string studentAge;public string StudentAge { get { return studentAge; } set { if(studentAge>16) //添加的业务逻辑 studentAge=value; //添加的业务逻辑 else //添加的业务逻辑 Console.WriteLine("不是指定的年龄范围!"); //添加的业务逻辑 }}
属性可以是“只读的”
先看下面这段会报错代码:
Class Student{ private ing age ; public int Age { get{return age;} }}static void Main(string[] args){ Student stu=new Student(); stu.Age=20;}
可以有人会问会报什么样的错误呢?
无法对属性或索引器" ****.Student.Age "赋值--它是只读的
那么属性设为只读的有什么好处呢?
例如:
我们要根据人的生日来计算出他的年龄。
Class Student{ private DateTime birthday; public DateTime Birthday { get{return birthday;} set{birthday =value;} } public int Age { get { return DateTime.Now.Year-birthday.Year; } }}static void Main(string[] args){Student stu=new Student();stu.Birthday=Convert .ToDataTime("1988-2-3");Console.WriteLine( "my old {0}",stu.Age);}
属性的简要写法:
在 .Net 3.0出现以后,属性可以使用简写的方式。
public int age {get ; set ;}public string Name { get ; set ;}
简要写法还不支持只读或只写:
public int age { get ; }//错
- C#中的属性类
- C#中的属性类
- C#中的属性类
- 类中的属性
- iOS 中的类属性
- iOS 中的类属性
- iOS 中的类属性
- iOS 中的类属性
- python中的类属性和实例属性
- python中的类属性和实例属性
- python中的类属性和实例属性
- python中的类属性和实例属性
- python中的类属性与实例属性
- C#类中的属性是什么?
- Delphi 遍历类中的属性
- 类/类别中的property属性
- 【JAVA】调用类中的属性
- 属性中的属性
- QTP之reporter对象方法全解析
- perl 符号表
- VC++------------为CListBox加上智能水平滚动条
- VC++6.0与VS的区别(代码移植中发现的区别,待添加)
- 对共享中断理解
- 类中的属性
- TextView在setText()时提示出错
- sed
- ARM linux strace 安装
- s3c2410调试串口改成普通串口
- HTTP错误代码详细介绍
- 回归(regression)、梯度下降(gradient descent)
- Android中Activity启动的方式
- hdu 2063 二分图匹配