{ 的目的;放}
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 访问它们的私有变量。
我正在学习 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 访问它们的私有变量。