对于我正在研究的Unity3d游戏,我有一种情况,我想要一个带有微不足道的getter的可读/可写属性,但是一个可以做更多工作的setter。我的代码如下所示:
// IColor.cs
interface IColor {
Color colorPainted { get; set; }
}
// Player.cs
public class Player : Monobehaviour, IColor {
// ...
public Color colorPainted {
get { }
set {
colorPainted = value;
// some other code
}
// ...
}
}
我不知道如何对get
部分做些什么。我不能return colorPainted;
,因为这会导致堆栈溢出。写入的代码将无法编译,因为我没有返回值。
我不是C#向导,但似乎我需要一个_colorPainted
支持变量,并通过get
和set
提供对它的访问权限。这看起来有点冗长 - 有没有更好的方法呢?在Objective-C中,我只是让getter未实现,但这似乎不起作用。
答案 0 :(得分:3)
不幸的是在C#中没有办法解决它。您需要为该属性提供支持字段:
// Player.cs
private Color _colorPainted;
public class Player : Monobehaviour, IColor {
// ...
public Color colorPainted {
get { return _colorPainted; }
set {
_colorPainted = value;
// some other code
}
// ...
}
}
答案 1 :(得分:2)
使用支持成员来保存值:
public class Player : Monobehaviour, IColor {
// ...
private Color _colorPainted;
public Color colorPainted {
get { return _colorPainted; }
set {
_colorPainted = value;
// some other code
}
// ...
}
}
在您无法返回属性本身的示例中,您的setter也将无法正常工作。同样的问题。基本上,当你写这个:
public Color colorPainted { get; set; }
你真正写作的内容是这样,只有更短的时间:
private Color _colorPainted;
public Color colorPainted
{
get { return _colorPainted; }
set { _colorPainted = value; }
}
编译器只是为您处理支持字段,允许您以较短的方式编写它。但是当你走出那个较短的语法时,你必须自己管理支持字段。
由于支持字段是私有的,因此使用类或接口类型的任何代码都没有区别。