2

我正在学习 Java,最近我也开始学习 C#。在 Java 中,有人告诉我编写类的某些成员的 set 方法,并进行检查以进行验证,例如,如果它是一个字符串 - 字符串不为空。然后我们在构造函数中调用 set 方法,当我使用构造函数初始化类的对象时,它会验证我的数据。

所以在 C# 中有所谓的属性,它们应该与 Java 中的 set/get 方法具有相同的逻辑,我可以在属性中验证我的数据。

如何在 C# 的构造函数中调用该设置方法/设置属性,这样我就不必编写两次验证代码——一次在属性中,一次在构造函数中?

代码:类的一些简单示例

class Program
{
    private int someVariable;

    public Program(int someVariable)
    {
        this.someVariable = someVariable;
    }

    public int SomeVariable
    {
        get { return someVariable; }
        set
        {
            if (value > 5)
            {
                Console.WriteLine("Error");
            }
            else
            {
                someVariable = value;
            }
        }
    }
    static void Main(string[] args)
    {
        Program pr = new Program(10);
        pr.SomeVariable = 10;
    }
}
4

3 回答 3

6

您将调用this.SomeVariable您的构造函数,然后该构造函数将执行set您的部分属性并验证该值。现在,您通过直接设置变量someVariable值(有时称为“支持字段”)来绕过它

通常在 C# 中,我保持支持字段和属性彼此相邻,以便更容易阅读代码,如下所示:

int _someVariable;
public int SomeVariable
{
    get { return _someVariable; }
    set { /* ... */ }
}
于 2013-02-01T00:39:06.340 回答
5

您可以从构造函数中访问该属性:

public Program(int someVariable)
{
    SomeVariable = someVariable;
}

注意:您可能不应该直接在您的设置器中写入控制台。一个更好的方法是抛出一个异常——这样你的程序的其余部分就可以对它做点什么。或者,如果传入的值超出范围,您可以设置一个默认值。

public int SomeVariable
{
    get { return someVariable; }
    set
    {
        if(value > 5)
            throw new InvalidOperationException("SomeVariable cannot be greater than 5.");
        someVariable = value;
    }
}

或者,

public int SomeVariable
{
    get { return someVariable; }
    set
    {
        someVariable = value > 5 ? 5 : value;
    }
}
于 2013-02-01T00:39:42.693 回答
2

去做就对了。

public Program(int someVariable)
{
    SomeVariable = someVariable;
}
于 2013-02-01T00:40:25.023 回答