菜鸟的困惑:attribute和property

nixjojo 2009-10-08 06:15:23

public class Account{
//attributes
private double balance;

//properties
public double Balance {
get { return balance; }
set { balance = value; }
}

//constractor
public Account() {
Balance = 0;
}

//method
public void DepositMoney(double f) {
Balance = Balance + f;
}
}




我的疑惑是,在method里,应该是 Balance = Balance + f; 还是balance = balance + f; ?

...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoeBlackzqq 2009-10-08
  • 打赏
  • 举报
回复
同意3、4楼兄弟的意见。如果使用Balance,实际上相当于调用了get(return balance;)这里的句子。如果你只需要用到balance,那就直接用吧,何必非要用Balance呢(多执行了一个return语句)

一般情况下,Balance这种是用于外部类调用的,所以它的前面一般会有public,如果是balance,一般只给类内部方法使用,所以在声明时,会用private。
nixjojo 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chen_ya_ping 的回复:]
小写的那个是字段,我想其实你的那个地方应该是写小写的。
大写的那个是属性。

我认为你的代码写成这样比较好:
public class Account{
  //attributes
  private double balance;

  //properties
  public double Balance {
    get { return balance; }
    set { balance = value; }                     
  }
 
  //constractor
  public Account() {
  balance = 0;
  }
 
  //method
  public void DepositMoney(double f) {
    balance = balance + f;
  }
}
字段设置成私有的,属性设置成公有的。这样的话,你就可以通过属性来访问你的那个私有的字段,包括写跟读。这个是封装也就是保证了安全,但是在C#反射的强大的功能下,你上面的那个私有字段,也可以在外部直接访问到。

[/Quote]

"但是在C#反射的强大的功能下,你上面的那个私有字段,也可以在外部直接访问到。 "
为什么呢?
chen_ya_ping 2009-10-08
  • 打赏
  • 举报
回复
小写的那个是字段,我想其实你的那个地方应该是写小写的。
大写的那个是属性。

我认为你的代码写成这样比较好:
public class Account{
//attributes
private double balance;

//properties
public double Balance {
get { return balance; }
set { balance = value; }
}

//constractor
public Account() {
balance = 0;
}

//method
public void DepositMoney(double f) {
balance = balance + f;
}
}
字段设置成私有的,属性设置成公有的。这样的话,你就可以通过属性来访问你的那个私有的字段,包括写跟读。这个是封装也就是保证了安全,但是在C#反射的强大的功能下,你上面的那个私有字段,也可以在外部直接访问到。
SQL77 2009-10-08
  • 打赏
  • 举报
回复
public Account() {
Balance = 0;
}

这样默认就是调用了SET访问了,
不过觉得还是balance=balance+f;好点
wartim 2009-10-08
  • 打赏
  • 举报
回复
看你具体要求咯
你这里最好直接是用内部的变量,而属性是开放给外面用的,除非你有这种需求:
public class Account{
//attributes
private double balance;

//properties
public double Balance {
get { return balance×100; }
set { balance = value/100; }
}

//constractor
public Account() {
Balance = 0;
}

//method
public void DepositMoney(double f) {
Balance = Balance + f; //如果想使用运算后的结果就用属性
balance = balance + f; //如果balance和Balance代表不同的逻辑而且只想用原始值就用balance
}
}

JackChin7 2009-10-08
  • 打赏
  • 举报
回复
attributes通常称为字段;而properties成为属性(器),用于获取和设置字段值的。
等号后边的Blance是获取(get)blance的值的,然后与f相加,最后等号左边赋给Blance,会调用Blance的get来设置blance值。一般情况用属性(器)来操作字段的值,如果是用字段直接操作值也可以。
xray2005 2009-10-08
  • 打赏
  • 举报
回复
都可以.没什么特别规定.
个人觉得,只是说:
balance是类内部的成员的,不对外公开
Balance 是属性对外公开的,那么你的方法也是对外公开的,当然用Balance 好点,而不是把自己私有内部成员放方法里面

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧