我正在研究一个名为 PByte 的类,它应该代表一个介于 32 和 126 之间的 int 值。(PByte = Printable Byte。)
现在我想防止类的用户错误地初始化一个对象,但我不想抛出异常,我只是希望 Visual Studio 不编译,就像你尝试这样做时发生的那样:byte b = 256;
sealed class PByte : IEquatable<PByte>, IComparable, IComparable<PByte>
{
public PByte(int value)
{
/* if (value < 32 || value > 126)
throw new ArgumentException("\"" + value + "\" is not a valid PByte-value"); */
this._value = value;
}
[...]
我也实现了这个:
[...]
public static implicit operator PByte(int value)
{
/* if (value < 32 || value > 126)
throw new ArgumentException("\"" + value + "\" is not a valid PByte-value"); */
return new PByte(value);
}
}
所以这也应该是不可能的:
PByte p = 2000;
最佳答案
如果不使用代码契约,则无法在编译时强制执行。即便如此,我认为代码契约只会产生警告,并且通常会将问题的所有权归于调用范围。
关于c# - 如何防止用户错误地初始化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851762/