【发布时间】:2014-04-06 21:49:20
【问题描述】:
作为实习的一部分,我使用 C# 工作了六个月。我在实习中学到的东西是 C# 属性的美妙之处,也就是 setter 和 getter。实习开始的时候,属性也是我困惑的一个来源,但是用了一段时间,我就爱上了它。
回到 Java 学习课程,我不得不告别它。
直到..我开始了这个简单的任务:
我的方法和构造函数:
private double xCoor;
private double yCoor;
public Point(double xCoor, double yCoor)
{
this.xCoor = xCoor;
this.yCoor = yCoor;
}
public void setCoor(double xCoor, double yCoor)
{
this.xCoor = xCoor;
this.yCoor = yCoor;
}
public void printCoor()
{
System.out.println("(" + xCoor + ", " + yCoor + ")");
}
为了演示,这里是我的主要方法:
Point pointOne = new Point(6.0, 7.0);
pointOne.printCoor();
pointOne.setCoor(9.0, 3.0);
pointOne.xCoor = 9.0;
pointOne.yCoor = 7.0;
System.out.println("Java Properties: " + pointOne.xCoor);
System.out.println("Java Properties: " + pointOne.yCoor);
如您所知,以Point pointOne = ..; 开头的前三行是“Java”做事的方式。可以看到getter是print语句的形式,setter是.setCoor(..)的形式。
现在,我的问题是,在 Java 中(我刚学过) - 您还可以通过 pointOne.xCoor = .. 的类似属性的声明来设置私有变量,当然,也可以通过与 pointOne.xCoor 相同的方式获取它们。
我知道这种与 C# 方式的差异,因为可以手动声明属性的名称,就像这样(如果它是 C#)。
public string XCoor
{
get { return this.xCoor; }
set { xCoor = value; }
}
有人可以帮我理解 Java 处理属性的方式和 C# 方式之间的区别吗?
【问题讨论】:
-
那些是字段,不是属性;您不能在 setter / getter 中编写代码。
-
@SLaks 你说的是
pointOne.xCoor = 9.0; pointOne.yCoor = 7.0;是字段,而不是属性? -
我错过了什么吗?尝试直接访问私有变量会引发异常。
-
嗯。我还没有运行它 - 你可能是对的..
-
它们需要被声明为公开才能直接使用
标签: c# java properties setter getter