我想使用与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
,它会编译,但如果我使用它,我会得到一个空指针异常。
答案 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)
您的“空”实例是否应该共享并且相同?如果是这样,以下机构可能正是您要找的。 p>
private static WorldBlock emptyInstance;
public static WorldBlock Empty
{
get
{
if (emptyInstance == null)
{
//initialize it
}
return emptyInstance;
}
}