C#中的属性和java中的域是一个概念吗?最近看到一些code,感觉两者之间有些差别,希望有牛人指点一下,小弟先多谢了!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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  %                  
    楼主加油
      

  2.   

    恩,我也觉得应该是一样的,可是一天在一本老外的windows forms的书里,有这样一段代码,您看有什么特别的意思没:public class Photograph
    {
        Private string _filename;
        ....    Public string FileName
        {
             get  { return _filename; }
        }
     
        ....
    }他给的代码中,所有的public属性都对应一个类的private的私有成员变量,这是为什么呢?
      

  3.   

    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");
      

  4.   

    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方法的调用封装成类似普通的成员访问方式,据说是为了让代码显得更自然
      

  5.   

    “C#中的“属性”其实是对一个字段的get和set方法(好像C#里叫做访问器)”
    您的回复一针见血。所举例子更是入木三分!真心感谢您这么翔实的回复我的疑问,多谢多谢!