如果在写一个类的时候,将某一属性指定为private,再为此属性写public的getter和setter方法,那么此时的写getter和setter方法是不是多此一举?
既然最终此属性写public的getter和setter方法了,那么干嘛当初不直接指定该属性为public呢?
既然最终此属性写public的getter和setter方法了,那么干嘛当初不直接指定该属性为public呢?
http://kb.cnblogs.com/page/50502/
"如果在写一个类的时候,将某一属性指定为private,再为此属性写public的getter和setter方法"
这种东西确实是多此一举,毫无疑问的多此一举,而且还会有性能损失就直接搞成public field就可以了不过在复杂程序架构里有一点是很有用处的:
属性可以被声明为virtual,abstract,而且可以在接口中定义。让什么狗屁的教条去见鬼去吧!不要被限制了自己的想象力
private int _iNum;
public int Num
{
get { if(_iNum 满足某条件 ) { } return _iNum; }
set { (value 判断相对应值) _iNum = value; }
}
另外设置getter 和 setter 访问字段的好处是,可以设置该字段是只读还是只写.
而在C#中,我们说属性。
假如说一个类Student,其中有两个字段,姓名(Name) 年龄(Age)
public Class Student
{
public string Name;
public int Age;
}
那么我们实例化一个该类的对象,并且初始化。
Student student = new Student();
student.Name = "remember_me";
student.Age = 1000; //注意这里,我们赋值了1000
以上代码中,我们可以看出,我们给Age字段赋值了1000,稍有常识就应该知道,这是不切实际的。
为了避免这种情况的发生,我们需要在对类中某些敏感字段赋值的时候,稍加给予业务逻辑判断。
属性就是实现这个功能的。
属性的书写方法:
1、把敏感字段私有化
2、提供公共属性
3、编写业务逻辑判断
public Class Student
{
public string Name;
private int age; //将敏感字段私有化
//提供属性 注意:属性类型与绑定字段一致,一般情况字段名字小写,而属性首字母大写
public int Age
{
get{return age;} //get访问器,返回敏感字段的值
set //set访问器,对铭感字段赋值
{
if(value < 100 && value > 0) //value为一个属性,代码穿进来的值,我们要对这个值进行判断是否符合。
{
age = value;
}
else
{
age = 20; //不符合的话,我们指定一个值。
}
}
}
}以上代码中,我们就为敏感字段封装了属性Age
我们可以测试一下
实例化一个对象
Student student = new Student();
student.Name = "remember_me";
student.Age = 1000; //因为类中字段age已经为私有的了,不可以访问,所以我们要调用属性对其赋值。
看一下结果,因为1000不符合要求,所以赋值了我们给定的值 20。这种类写法是一中比较老的写法,在C#3.0中,出现了一个新特性,叫做自动属性。
写法如下:
public class Student
{
public string Name{get;set;}
public string Hobby{get;set;}
}
这种写法是对于没有业务逻辑要求的字段,我们可以这样些,这种类写法省略了私有字段的声明。这种类写法比前种写法省去了2/3的代码量。
那么少去的代码哪去了呢?
其实一点也没少,也可以说是个语法糖罢了。
在程序由C#编译器编译为MSIL(微软中间代码)的时候,会由编译器自动生成的。可以使用反编译工具查看一下。