{ 的目的;放}

The purpose of { get; set}

我正在学习 C#。我在想,为什么是

public class Example {

public int X { get; set}

}

用过,什么时候可以用

public class Example {

public int X;

}

两者做同样的事情(以我的理解)。两者都允许您更改变量的值。为什么使用 get/set 而不是仅声明变量 public

getter 和 setter 的目的是在更改或访问 属性 时进行一些计算、处理或更新。

将 getter 和 setter 声明为空与声明 public 字段相同。

class Property { 

    private bool enabled = false;
    private int numberOfEnabledReadings = 0;
    public bool Enabled {
        get
        {
            //Do some processing (in this case counting the number of accecess)
            numberOfEnabledReadings++;
            return enabled;
        }
        set
        {
            enabled = value;
            //Update GUI
        }
    }

}

编辑:

正如我之前所说:"Declaring getters and settters as empty is the same as declaring a public field."。

好吧,就功能而言确实如此。

实际上它们是不一样的,正如前面提到的 DataBinding 是根据 Properties 实现的。

而且,属性需要一点开销,试试这个:

class PropertyTest
{
    public int field = 0;
    public int Property { get; set; }
}
    private void PropertyChangeTime()
    {
        int counter = 0;
        var instance = new PropertyTest();
        var watch = System.Diagnostics.Stopwatch.StartNew();
        for (int i = 0; i < 100000000; i++)
        {
            instance.field = counter++;
        }
        watch.Stop();
        var elapsedMsField = watch.ElapsedMilliseconds;
        counter = 0;
        watch.Reset();
        watch.Start();
        for (int i = 0; i < 100000000; i++)
        {
            instance.Property = counter++;
        }
        watch.Stop();
        var elapsedMsProperty = watch.ElapsedMilliseconds;
        Console.WriteLine($"field: {elapsedMsField}\nproperty: {elapsedMsProperty}");
    }

在我的机器中:

field: 55
property: 68

查看以下来源

https://www.w3schools.com/cs/cs_properties.asp

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties

基本上属性允许您指定您的 class' 对象如何能够操纵 and/or 访问它们的私有变量。