繁体   English   中英

返回类实例的静态属性

[英]static property which returns class instance

我想使用类似链接的东西! 部分源代码如下所示:

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

该函数返回一个已经初始化的向量(每个轴上为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 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 ,它会编译,但是如果我使用它,则会得到一个空指针异常。

像这样:

private static WorldBlock __empty = ...;

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

如果您只想要一个空的WorldBlock,建议您写:

public static readonly WorldBlock Empty = new WorldBlock();

而不是您的财产。 但是,由于“ Empty”对象的设置者是公共的,因此这有点儿狡猾,因此实际上不能保证它实际上是空的。

你必须做:

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

更换someThing ,不管你是想Empty存储....如果那null或什么的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM