Tob*_*son 4 c# unity-game-engine
我对getter和setter有另一个问题.现在我开始使用c#getters和setter,因为我理解它们.我看到的问题是为什么我应该创建如下所示的公共变量:
// Variable
private int _iRandomNumber
// Getter and setter
public int iRandomNumber
{
get { return _iRandomNumber; }
set { _iRandomNumber = value; }
}
Run Code Online (Sandbox Code Playgroud)
我没有看到这一点,因为只是将变量设为公开会有什么不同,因为无论如何得到get并设置在同一个括号中?
但是,如果我喜欢这样:
// Variable
private int _iRandomNumber
// Getter and setter
public int GetiRandomNumber { get { return _iRandomNumber; } }
public int SetiRandomNumber { set { _iRandomNumber = value; } }
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试单独使用我的SetiRandomNumber时,Unity编译器会抱怨我无法使用我的SetProperty,因为我的SET中没有GET属性.我是否真的必须像我写的第一个例子一样,因为在我写的时候,c#中的Getters和Setters有什么意义?
或者我应该转而离开它们,就像我从一开始就问到并为c ++中的每个Get和Set创建函数所以我实际上可以自己使用它们?
很抱歉让这个问题成为一个新问题,但是由于很长时间以来无法将此作为评论添加到我之前的问题中.
属性允许您在设置值时触发事件,例如:
public string Name {
get { return name; }
set {
name = value;
var eh = NameChanged; // avoid race condition.
if (eh != null)
eh(this, EventArgs.Empty);
}
}
private string name;
public event EventHandler NameChanged;
Run Code Online (Sandbox Code Playgroud)
另外一个好处是,您可以通过调试器或诊断打印语句在getter/setter中放置断点来跟踪属性设置或读取的时间.