c#中的"属性"和"域"有什么关系?如下的代码,数据是存在属性中还是存在域中? 类省略了
类省略了private int _name;
public int Name {
get{return _name;}
set{_name = value;}
}
但是这种方式属性有什么意义?c#也能和java那样直接给实例域写setget方法不是更好么…… 展开
数据 存在 类 的 字段 _name 中。
类的定义包括数据和行为,其中只有字段,也就是变量才是数据,其他的属性、方法都是行为。C#中属性不能保存数据。
问:为什么要用属性,答:为了封装对象,对外部提供安全的访问方式.
至于为什么要封装,这太难回答了(水平不够,逃~~),自己慢慢学习领悟把。
就像为什么要用类,为什么要用接口,为什么要用设计模式,等完全理解这些问题,就理解了面向对象设计的精髓。
在java中没有属性(和C#同等意义的),
java域(field)= C#字段 = 类的成员变量 (class variable) ,
因为我不会java网上查的也不是很懂
属性是.net平台才有的东西,所以不要用java的眼光去理解。
在C#中属性只是一种特殊的函数,它由两个方法get和set组成。
get方法
表示调用这个属性时返回的内容,你也可以改成别的东西,比如常数、多条语句等,只要类型匹配(int),不一定要返回内部的私有字段(private int _name)。
set方法
表示要如何处理使用赋值语句传递的value参数,你可以老老实实按一般写法,
将_name = value,也可以处理参数,例如
if (value > 0) {_name= value * 2;} else {_name = 0;}
还可以不写,这样value值就传不进来
甚至你可以传递到其他的属性的私有字段 _age = value。
你如果不想用属性,也可以分开写get方法和set方法。
class class1
{
private int _name;
getname(){ return _name;}
setname(int value){ _name = value;}
}
或者直接把成员变量公开,直接调用也行,虽然一般不推荐这样做。
class class1
{
public int name;
}
个人经验见解,如满意,请采纳,谢谢。