【发布时间】:2014-05-14 08:48:04
【问题描述】:
我还有一个关于 getter 和 setter 的问题。现在我开始使用我理解的 c# getter 和 setter。我看到的问题是,我为什么要制作如下所示的公共变量:
// Variable
private int _iRandomNumber
// Getter and setter
public int iRandomNumber
{
get { return _iRandomNumber; }
set { _iRandomNumber = value; }
}
我不明白这有什么意义,因为将变量设为 public 会有什么不同,因为它无论如何都将 get 和 set 放在同一个括号中?
但是,如果我这样做:
// Variable
private int _iRandomNumber
// Getter and setter
public int GetiRandomNumber { get { return _iRandomNumber; } }
public int SetiRandomNumber { set { _iRandomNumber = value; } }
然后,当我尝试单独使用我的 SetiRandomNumber 时,Unity 编译器抱怨我无法使用我的 SetProperty,因为我的 SET 中没有 GET 属性。我真的应该让它像我写的第一个例子一样,因为在我写的时候,c# 中的 Getters 和 Setters 有什么意义?
或者我应该远离它们,就像我从一开始就问的那样,像在 c++ 中一样为每个 Get 和 Set 创建函数,这样我就可以自己实际使用它们?
很抱歉提出这个新问题,但是由于它太长了,所以无法在我之前的问题中添加它作为评论。
【问题讨论】:
-
你写了什么让 Unity 编译器抱怨?使用公共但单独的属性来获取和设置字段值而不是 .. 普通属性的原因是什么?
-
我想要不同的 GET 和不同的 SET 的原因是我希望其他几个脚本能够读取该值,但不能更改它。虽然我只是想更改变量的另一个脚本。
-
目前还不清楚Unity 编译器报错的原因。我不知道那里的 脚本规则。你能展示一下你是怎么做到的吗?也许你可以用
privategettter/setter 来欺骗它? Example. -
我试过这样做:this.GetComponent
().SetiDaysBeforeWeatherChange += 1; Unity 编译器:属性或索引器 ToD_Weather_Base.SetiDaysBeforeWeatherChange' cannot be used in this context because it lacks theget' 访问器 但如果这是使用 GET 和 SET 的错误方式,也许我应该更改它?并按照我应该的方式,将 GET 和 SET 放在同一个公共变量中。并且仅对于只读变量,我在没有 SET 的情况下进行 GET。 -
你的错误是
+=,为此你显然需要getter和setter。