我有点搞不懂为什么语言会有这些。我是一名Java程序员,在我职业生涯的初期,Java是我开始使用的唯一一种语言,你知道的。
所以在Java中,我们当然没有属性,我们编写了getThis()和setThat(.)方法。
我们拥有财产会得到什么好处?
谢谢。
编辑:另一个查询:在具有属性的语言中会产生哪些命名约定?
发布于 2009-03-02 22:02:58
你觉得哪一个更自然?
// A
person.setAge(25)
// B
person.age = 25;
// or
person.Age = 25; //depending on conventions, but that's beside the point大多数人会回答B。
它不仅是语法糖,而且在进行反射时也很有帮助;您实际上可以在数据和操作之间做出区别,而不需要使用方法的名称。
下面是C#中不熟悉属性的人的一个示例:
class Person
{
public int Age
{
set
{
if(value<0)
throw new ArgumentOutOfRangeException();
OnChanged();
age = value;
}
get { return age; }
}
private int age;
protected virtual void OnChanged() { // ... }
}而且,大多数人以后总是使用属性而不是提升公共成员,原因与我们总是使用get/set的原因相同;没有必要重写绑定到数据成员的旧客户端代码。
发布于 2009-03-02 22:04:03
语法要好得多:
button.Location += delta;超过:
button.setLocation(button.getLocation() + delta);发布于 2009-03-02 22:10:18
编辑:
下面的代码假设您正在手工完成所有操作。在我的示例世界中,编译器将生成简单的get/set方法,并将所有直接变量访问转换到这些方法。如果不是这样的话,那么客户端代码将不得不重新编译,这很大程度上违背了目的。
原件:
属性的主要参数是,如果从变量转到方法,则不需要重新编译代码。
例如:
public class Foo
{
public int bar;
}如果我们稍后决定对"bar“进行验证,则需要这样做:
public class Foo
{
private int bar;
public void setBar(final int val)
{
if(val <= 0)
{
throw new IllegalArgumentException("val must be > 0, was: " + val);
}
bar = val;
}
public int getBar()
{
return (bar);
}
}但是添加set/get方法会破坏所有的代码。如果它是通过属性完成的,那么您可以在不破坏客户端代码的情况下在事实之后添加验证。
就我个人而言,我不喜欢这个想法--我更喜欢使用注释,让简单的set/get自动获取,并能够根据需要发布自己的set/get实现(但我不喜欢隐藏的方法调用)。
https://stackoverflow.com/questions/604188
复制相似问题