C# 返回类实例的静态属性

C# 返回类实例的静态属性,c#,properties,static,C#,Properties,Static,我想使用类似的东西作为!部分源代码如下所示: public struct Vector3 { public static Vector3 zero { get; } } 此函数返回一个已初始化的向量(在每个轴上为0)。这是否可能,因为它是一个结构?这就是我所拥有的: public class WorldBlock { public enum e_WorldBlockType { Undef, Earth, Stone,

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

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;
    }
}
但我发现:
错误CS0840:'WorldBlock.Empty.get'必须有一个主体,因为它没有标记为抽象或外部。定义两个访问器时,可以自动实现该属性

我应该怎样写正文

编辑: 例如,如果我添加一个
私有集
,它会编译,但是如果我使用它,我会得到一个空指针异常

类似这样:

private static WorldBlock __empty = ...;

public static WorldBlock Empty {
  get {
    return WorldBlock __empty;
  }
}
你必须做到:

public static WorldBlock Empty
{
  get{return someThing; }
}
某物
替换为您想要的
空的
存储的任何东西。。。。如果这是
null
或任何内容

从你的头衔。。。看起来您希望返回该类的实例。如果您只需要该类的一个实例。。。您正在寻找
单例设计模式。

您的“空”实例是否应该共享并保持相同?如果是这样的话,下面的正文可能就是你要找的

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

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

public static readonly WorldBlock Empty = new WorldBlock();

而不是你的财产。然而,这有点狡猾,因为“空”对象的setter是公共的,所以不能保证它实际上是空的。

可能是我编辑过你的标题的副本。请看“”,其中的共识是“不,他们不应该”。有多少人会在回答这个问题时重新发明他们自己的,buggy
Lazy
?我想,这可能是解决方案,给我一个secCan smbd告诉我,如果这只包含一个空WorldBlock实例,那么如果我有20个WorldBlock实例,只有一个
\u empty
实例?@immerhart:
WorldBlock.empty==new WorldBlock()
将计算为
false
。这对你来说是正常的行为吗?不知道为什么。。。你有什么建议?+1。由于
WorldBlock
是可变的,因此
WorldBlock.Empty
没有多大意义。另外,您有一个输入错误-字段名丢失。谢谢。我修正了打字错误