属性与字段变量的区别

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

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

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

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

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

变量的定义
None.gif public   string  mPublicString;
属性的定义
ExpandedBlockStart.gif ContractedBlock.gif          public   string  PublicString dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif            
getdot.gif{return this.mPublicString;}
ExpandedSubBlockStart.gifContractedSubBlock.gif            
setdot.gif{this.mPublicString = value;}
ExpandedBlockEnd.gif        }

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

ExpandedSubBlockStart.gifContractedSubBlock.gif    
elsedot.gif{
InBlock.gif      
return "";
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif  }

ExpandedSubBlockStart.gifContractedSubBlock.gif  
setdot.gif{
InBlock.gif    
this.mPublicString = value;
ExpandedSubBlockEnd.gif  }

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

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

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




转载于:https://www.cnblogs.com/Eugene/archive/2007/03/06/665130.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值