如何防止用户错误地初始化变量?

时间:2012-08-07 18:17:50

标签: c# visual-studio-2010

我正在研究一个名为PByte的类,它应该表示一个介于32和126之间的int值。(PByte = Printable Byte。) 现在我想阻止类的用户错误地初始化一个对象,但我不想抛出异常,我只是想让Visual Studio不编译,就像你尝试这样做时发生的那样:{{ 1}}

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); } }

2 个答案:

答案 0 :(得分:5)

如果不使用代码契约,则无法在编译时强制执行此操作。即便如此,我认为代码合同只会产生警告,并且通常会将问题的所有权置于调用范围内。

答案 1 :(得分:1)

您最常使用Code Contracts和编辑器扩展程序(扩展程序库中提供)一起执行此操作。不过,我不确定它是否会完全执行所有情况。 (编辑:打开项目属性的Code Contracts部分中的静态检查。)

所以,粗略地说,你可以这样做:

public PByte(int value)
{
    Contract.Requires<ArgumentException>(value >= 32 && value <= 126, "\"" + value + "\" is not a valid PByte-value");
    this._value = value;
}