C#中的属性 和 java中的域 C#中的属性和java中的域是一个概念吗?最近看到一些code,感觉两者之间有些差别,希望有牛人指点一下,小弟先多谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【azhu422】截止到2008-07-22 00:45:25的历史汇总数据(不包括此帖):发帖的总数量:4 发帖的总分数:80 每贴平均分数:20 回帖的总数量:8 得分贴总数量:0 回帖的得分率:0% 结贴的总数量:2 结贴的总分数:40 无满意结贴数:0 无满意结贴分:0 未结的帖子数:2 未结的总分数:40 结贴的百分比:50.00 % 结分的百分比:50.00 % 无满意结贴率:0.00 % 无满意结分率:0.00 % 楼主加油 恩,我也觉得应该是一样的,可是一天在一本老外的windows forms的书里,有这样一段代码,您看有什么特别的意思没:public class Photograph{ Private string _filename; .... Public string FileName { get { return _filename; } } ....}他给的代码中,所有的public属性都对应一个类的private的私有成员变量,这是为什么呢? c#中,你经常都可以直接访问类的成员变量,如上面的代码,你可以对一个Photograph的对象ph这样使用ph.FileName="photoName";这个"photoName"的字符串就保存在私有变量_filename中了.而java中我们通常的做法是,所有的成员变量都是私有的,也就是在类外是不可见的,因此对应的做法是:public class Photograph{Private string filename;Public string getFilename(){return this.filename;}public void setFilename(String fn){this.filename = fn;}}赋值和取值都是通过方法来进行的,例如ph.setFilename("photoName"); C#中的“属性”其实是对一个字段的get和set方法(好像C#里叫做访问器)在对属性赋值时执行相应的set方法,取属性值时执行相应的get方法在写法上和直接访问公有字段是一样的,但是访问公有字段时只是简单地存取字段值,而访问属性时由于是通过调用方法实现的,因此可以实现更多功能(虽然大多数时候方法内部也只是存取相应的字段),这样做的好处如下photo._filename = "xxx" //假设_filename不是private而是public和photo.FileName = "xxx"下面让我们来假设一下你的系统功能,我们通常希望在改变filename后继续进行读取新文件,刷新显示等等,这样在每次为该字段赋值后都要写上这些代码,而假如通过属性的方式,我们可以把这些操作放在属性的set方法中,这样,每次只需要重新设置属性值,就会自动完成载入新文件并刷新显示再者String ss = photo._filename //同样假设_filename是public和String ss = photo.FileName都可以取得_filename的值,但假设某一天,我们希望对取到的文件名作某种处理,例如把"\"替换为"/",那我们要在每一个读取该字段的地方增加处理,但是用属性的方式,只需要在get方法里加上相应的处理就行了,代码其它地方不需要改动大多数情况下,字段设为private,同时增加一个对应的属性来存取它(也即增加一组get/set方法),这样可以对权限执行更精细的控制,例如安全检查等,还有,如果只提供get方法没有set方法,就得到了一个只读属性(同理还有只写属性)等等Java中的Javabean提供的是同样的机制,只不过C#将get/set方法的调用封装成类似普通的成员访问方式,据说是为了让代码显得更自然 “C#中的“属性”其实是对一个字段的get和set方法(好像C#里叫做访问器)”您的回复一针见血。所举例子更是入木三分!真心感谢您这么翔实的回复我的疑问,多谢多谢! 关于字符串分割的 构造方法不能由编程人员调用,而要系统调用? 求解多线程问题?数据库中有成千上万数据,每天都有20万以上标记为0的新纪录不断写入 初学JAVA,做聊天程序遇到的问题,c/s模式 Tomcat和Slide? 运行java程序,系统经常出现以下错误,请问是什么原因?高手指教! jb5和appserver的entity bean question 能者多捞 80! jtextarea的问题 帮我解释下这段代码的含义哦 IO流中使用BufferedWriter复制文件关于换行的问题 一个很简单的jsp的例子,调试程序报出如下错误信息?帮忙看看是怎么了? odbc
楼主【azhu422】截止到2008-07-22 00:45:25的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:80 每贴平均分数:20
回帖的总数量:8 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:2 结贴的总分数:40
无满意结贴数:0 无满意结贴分:0
未结的帖子数:2 未结的总分数:40
结贴的百分比:50.00 % 结分的百分比:50.00 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
{
Private string _filename;
.... Public string FileName
{
get { return _filename; }
}
....
}他给的代码中,所有的public属性都对应一个类的private的私有成员变量,这是为什么呢?
这个"photoName"的字符串就保存在私有变量_filename中了.而java中我们通常的做法是,所有的成员变量都是私有的,也就是在类外是不可见的,因此对应的做法是:
public class Photograph
{
Private string filename;Public string getFilename()
{return this.filename;}public void setFilename(String fn)
{this.filename = fn;}
}
赋值和取值都是通过方法来进行的,例如ph.setFilename("photoName");
在对属性赋值时执行相应的set方法,取属性值时执行相应的get方法
在写法上和直接访问公有字段是一样的,但是访问公有字段时只是简单地存取字段值,而访问属性时由于是通过调用方法实现的,因此可以实现更多功能(虽然大多数时候方法内部也只是存取相应的字段),这样做的好处如下photo._filename = "xxx" //假设_filename不是private而是public
和
photo.FileName = "xxx"下面让我们来假设一下你的系统功能,我们通常希望在改变filename后继续进行读取新文件,刷新显示等等,这样在每次为该字段赋值后都要写上这些代码,而假如通过属性的方式,我们可以把这些操作放在属性的set方法中,这样,每次只需要重新设置属性值,就会自动完成载入新文件并刷新显示再者String ss = photo._filename //同样假设_filename是public
和
String ss = photo.FileName都可以取得_filename的值,但假设某一天,我们希望对取到的文件名作某种处理,例如把"\"替换为"/",那我们要在每一个读取该字段的地方增加处理,但是用属性的方式,只需要在get方法里加上相应的处理就行了,代码其它地方不需要改动大多数情况下,字段设为private,同时增加一个对应的属性来存取它(也即增加一组get/set方法),这样可以对权限执行更精细的控制,例如安全检查等,还有,如果只提供get方法没有set方法,就得到了一个只读属性(同理还有只写属性)等等Java中的Javabean提供的是同样的机制,只不过C#将get/set方法的调用封装成类似普通的成员访问方式,据说是为了让代码显得更自然
您的回复一针见血。所举例子更是入木三分!真心感谢您这么翔实的回复我的疑问,多谢多谢!