连续两天被问到这个问题,发现初学者从wrox的入门经典红宝书中很难找到正确的答案。
通过这两天的回答我总结出一个通过讲解和例子来从初学者的眼光出发解释的方法。
(以C#语言下字符串类型为例)
在这里就不多说字段变量了,简单提一句,字段变量就是对象公布出来和外界交互数据的变量。
属性是对一个或多个变量的包装,在Java环境中,属性是通过从对象中暴露出来的Set方法和Get来实现的:
public boolean SetPublicString(string val){this.mPublicString = val;}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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的方法。
希望以上的内容能对你有所帮助,希望能知道你对于这个问题更精确,更简单明了的解释方法。
通过这两天的回答我总结出一个通过讲解和例子来从初学者的眼光出发解释的方法。
(以C#语言下字符串类型为例)
在这里就不多说字段变量了,简单提一句,字段变量就是对象公布出来和外界交互数据的变量。
属性是对一个或多个变量的包装,在Java环境中,属性是通过从对象中暴露出来的Set方法和Get来实现的:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
而在DotNet当中,总结了以上的Set和Get方法,直接将其定义成了一个暴露属性,通过对这个属性的访问方式不同(取值还是赋值)而采用不同的代码如以下所示的get代码段和set代码段
变量的定义
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
因为可以做到使用不同的代码段,所以在访问的时候可以使用更多的逻辑控制来取到或限制需要的值:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
综上就把字段变量mPublicString包装了起来,并不是直接的面向对象的使用者,达到控制的目的。
属性的方法中还能写各种复杂的逻辑,因为属性中set或get的代码块等同于SetPublicString和GetPublicString的方法。
希望以上的内容能对你有所帮助,希望能知道你对于这个问题更精确,更简单明了的解释方法。