2

对于我正在开发的 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支持变量,并通过 and 提供get对它的访问set。不过,这似乎有点冗长——有更好的方法吗?在 Objective-C 中,我只是让 getter 未实现,但这似乎不起作用。

4

2 回答 2

3

不幸的是,在 C# 中没有办法解决它。您需要为该属性提供一个支持字段:

// Player.cs

private Color _colorPainted;

public class Player : Monobehaviour, IColor {
    // ...
    public Color colorPainted {
        get { return _colorPainted; }
        set {
            _colorPainted = value;
            // some other code
        }
     // ...
    }
}
于 2012-10-29T00:53:54.463 回答
2

使用支持成员来保存值:

public class Player : Monobehaviour, IColor {
    // ...
    private Color _colorPainted;
    public Color colorPainted {
        get { return _colorPainted; }
        set {
            _colorPainted = value;
            // some other code
        }
     // ...
    }
}

在您无法返回属性本身的示例中,您的设置器也不起作用。同样的问题。本质上,当你写这个时:

public Color colorPainted { get; set; }

真正写的是这个,只是更短:

private Color _colorPainted;
public Color colorPainted
{
    get { return _colorPainted; }
    set { _colorPainted = value; }
}

编译器只是为您处理支持字段,允许您以更短的方式编写它。但是,当您跳出这种较短的语法时,您必须自己管理支持字段。

由于支持字段是私有的,因此使用类或接口类型的任何代码都没有区别。

于 2012-10-29T00:54:15.843 回答