对于一项作业,我必须使用结构在 C# 中编写一个 Tribool 类。只有三种可能的 tribools,True、False 和 Unknown,我将它们声明为静态只读。像这样:
public static readonly Tribool True, False, Unknown;
我需要我的默认构造函数来提供 False Tribool,但我不确定该怎么做。我试过 Tribool() { this = False; }
和 Tribool() { False; }
但我不断收到“Structs cannot contain explicit parameterless constructors”错误。
作业指定 Tribool 的默认构造函数应提供 False Tribool。否则,用户不应该能够创建任何其他 Tribools。我现在真的不知道该怎么办。任何建议将不胜感激。谢谢。
最佳答案
只是为 Jason 的回答添加一点:仔细设计您的结构,以便默认值有意义。例如,考虑 Nullable<T>
结构。期望的行为是当你说
Nullable<int> x = new Nullable<int>(); // default constructor
结果值在逻辑上为空。我们该怎么做?该结构定义如下:
struct Nullable<T>
{
private readonly T value;
private readonly bool hasValue;
public Nullable(T value)
{
this.value = value;
this.hasValue = true;
}
...
因此,当默认构造函数运行时,hasValue 自动设置为 false,value 设置为默认值 T。hasValue 设置为 false 的 nullable 被视为 null,这是所需的行为。这就是为什么 bool 是 hasValue 而不是 isNull 的原因。
关于c# - 覆盖 C# 结构中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181906/