为什么在C#UWP中为一个内容保留两个变量?

时间:2018-06-07 02:59:49

标签: c# uwp windows-10-universal

在C#中,我注意到许多程序员执行以下操作:

class X
{
    private int test_;

    public int test
    {
        get { return test_; }
        set { if (test_ != value) test_ = value; }
    }
}

我的问题是为什么要保留相同内容的私有变量和公共变量?

为什么我们不这样做?

class X
{
    public int test
    {
        get; set;
    }
}

我的意思是,我们正在改变私有变量。不使用单个公共变量有什么意义呢?

2 个答案:

答案 0 :(得分:3)

代码:

class X
{
    public int test
    {
        get; set;
    }
}

...直接等同于此:

class X
{
    private int test_;

    public int test
    {
        get { return test_; }
        set { test_ = value; }
    }
}

第一个示例是自动实现的属性。编译时,C#编译器会自动生成第二个例子。

现在,您首先提供的代码有这一行:

set { if (test_ != value) test_ = value; }

您会注意到它正在执行与自动属性等效代码不同的操作。而这就是这两种方法的区别所在。

当您为属性使用支持字段时,您可以引入需要代码遵循的特定规则。

例如,您可能希望在音乐应用上设置音量,因此您的代码可能如下所示:

public class Music
{
    private int _volume = 7;

    public int Volume
    {
        get { return _volume; }
        set
        {
            if (value >= 0 && value <= 10)
            {
                _volume = value;
            }
        }
    }
}

当您的属性包含这样的逻辑时,通常会有一个私有字段变量。

答案 1 :(得分:1)

这些不是两个变量。一个是场地,另一个是财产。属性是伪装的可选getter和setter方法。

您对该解决方案的提议实际上是该语言的一部分,称为自动实现的属性: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties