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