我正在尝试复制.NET的颜色struct
,它允许您使用Color.Black
,Color.White
等来调用颜色。这是我的代码:
struct Material
{
public string FilePath { get; set; }
public Material(string filepath) { FilePath = filepath; }
public static Material Sand
{
get
{
return new Material("images/sand");
}
}
public static Material Conrete
{
get
{
return new Material("images/conrete");
}
}
}
我收到一条错误消息,说我无法在struct
中使用构造函数。我正在有效地从.NET源代码(Color.cs)进行复制,这就是它的工作原理,尽管它不使用构造函数。但静态属性确实返回new Material()
。
构造函数CS0843上显示完整错误消息:
backing field for automatically implemented property must be fully assigned before it is returned to the caller
答案 0 :(得分:3)
您可以简单地“链接”this()
,如:
public Material(string filepath)
: this()
{
FilePath = filepath;
}
这是最常见的解决方案。
当然,你可以通过其他方式做同样的事情:
public Material(string filepath)
{
this = default(Material);
FilePath = filepath;
}
和
public Material(string filepath)
{
this = new Material { FilePath = filepath, };
}
等等。
答案 1 :(得分:0)
你可以有一个构造函数,而不是一个零参数。
然而,编写
并不是更清楚new Material { FilePath = "images/concrete" }
而不是
new Material("images/concrete");
可以通过调用框架提供的无参数构造函数来绕过自定义构造函数,因此不能依赖它来设置不变量。可以使用成员初始化语法设置字段和属性。所以struct构造函数并不是非常有用。