zoukankan      html  css  js  c++  java
  • 属性与字段变量的区别

    连续两天被问到这个问题,发现初学者从wrox的入门经典红宝书中很难找到正确的答案。

    通过这两天的回答我总结出一个通过讲解和例子来从初学者的眼光出发解释的方法。
    (以C#语言下字符串类型为例)

    在这里就不多说字段变量了,简单提一句,字段变量就是对象公布出来和外界交互数据的变量。

    属性是对一个或多个变量的包装,在Java环境中,属性是通过从对象中暴露出来的Set方法和Get来实现的:
    public boolean SetPublicString(string val){this.mPublicString = val;}

    public string GetPublicString(){return this.mPublicString;}

    而在DotNet当中,总结了以上的Set和Get方法,直接将其定义成了一个暴露属性,通过对这个属性的访问方式不同(取值还是赋值)而采用不同的代码如以下所示的get代码段和set代码段

    变量的定义
    public string mPublicString;
    属性的定义
            public string PublicString{
                
    get{return this.mPublicString;}
                
    set{this.mPublicString = value;}
            }

    因为可以做到使用不同的代码段,所以在访问的时候可以使用更多的逻辑控制来取到或限制需要的值:
    public string PublicString{
      
    get{
        
    if(this.mPublicString.Length>10){
          
    return this.mPublicString;
        }

        
    else{
          
    return "";
        }

      }

      
    set{
        
    this.mPublicString = value;
      }

    }
    以上代码的意思是如果访问PublicString时就去查看mPublicString的长度,如果大于10就返回否则就返回空字符串。

    综上就把字段变量mPublicString包装了起来,并不是直接的面向对象的使用者,达到控制的目的。
    属性的方法中还能写各种复杂的逻辑,因为属性中set或get的代码块等同于SetPublicString和GetPublicString的方法。

    希望以上的内容能对你有所帮助,希望能知道你对于这个问题更精确,更简单明了的解释方法。




  • 相关阅读:
    java编译错误No enclosing instance of type TestFrame is accessible. Must qualify the allocation with an enclosing instance of type TestFrame (e.g. x.new A(
    java 2中创建线程方法
    动态规划基本思想
    关于eclipse编译一个工程多个main函数
    java Gui初识
    Eclipse中java项目的打包
    java 播放声音
    把资源文件夹导入到eclipse中
    Java建立JProgressBar
    How to grant permissions to a custom assembly that is referenced in a report in Reporting Services
  • 原文地址:https://www.cnblogs.com/Eugene/p/665130.html
Copyright © 2011-2022 走看看