返回类实例的静态属性

时间:2014-01-08 19:22:33

标签: c# properties static

我想使用与link类似的东西!部分源代码如下:

public struct Vector3
{
    public static Vector3 zero { get; }
}

此函数返回已初始化的Vector(每个轴上为0)。这是可能的,因为它是一个结构?这就是我所拥有的:

public class WorldBlock
{
    public enum e_WorldBlockType
    {
        Undef,
        Earth,
        Stone,
        Air // no block set
    }

    public static WorldBlock Empty { get; }
    public e_WorldBlockType BlockType { get; set; }
    public bool IsWalkable { get; set; }

    public WorldBlock(e_WorldBlockType blockType = e_WorldBlockType.Undef, bool isWalkable = false)
    {
        this.BlockType = blockType;
        this.IsWalkable = isWalkable;
    }
}

但我明白了:error CS0840: 'WorldBlock.Empty.get' must have a body because it is not marked abstract or extern. The property can be automatically implemented when you define both accessors

我该如何写身体?

编辑: 如果我添加例如private set,它会编译,但如果我使用它,我会得到一个空指针异常。

4 个答案:

答案 0 :(得分:1)

这样的事情:

private static WorldBlock __empty = ...;

public static WorldBlock Empty {
  get {
    return WorldBlock __empty;
  }
}

答案 1 :(得分:1)

如果你只想要一个空的WorldBlock,我建议你写一下:

public static readonly WorldBlock Empty = new WorldBlock();

而不是你的财产。然而,由于“空”对象的设置者是公共的,所以它有点狡猾,所以实际上并不能保证它实际上是空的。

答案 2 :(得分:0)

你必须这样做:

public static WorldBlock Empty
{
  get{return someThing; }
}

someThing替换为您希望存储的任何内容Empty ....如果那是null或其他什么。

从你的标题......看起来你想要返回一个类的实例。如果您只想要这个类的一个实例......那么您正在寻找Singleton设计模式。

答案 3 :(得分:0)

您的“空”实例是否应该共享并且相同?如果是这样,以下机构可能正是您要找的。

private static WorldBlock emptyInstance;
public static WorldBlock Empty
{
   get
   {
      if (emptyInstance == null)
      {
         //initialize it
      }
      return emptyInstance;
   }
}