所以这里有一些我从未见过的语法,有人能告诉我这意味着什么吗?不确定这是否应该是抽象属性声明的一些简写或什么或什么。
public Class1 myVar { get; set; }
为了它的价值,Class1是一个抽象类。
答案 0 :(得分:82)
在C#3.0及更高版本中,auto-implemented properties使属性声明更加简洁,因为属性访问器中不需要额外的逻辑。它们还使客户端代码能够创建对象当您声明属性时,如以下示例所示,编译器将创建一个私有的匿名支持字段,该字段只能通过属性的get和set访问器进行访问。
// Auto-Impl Properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerID { get; set; }
答案 1 :(得分:27)
这是让编译器为您创建(隐藏)字段的语法。
同样非常有用的是:
public Class1 myVar{ get; private set; }
答案 2 :(得分:22)
它可能看起来像一个抽象属性或来自界面的属性,但它远非如此。为了鼓励开发人员使用属性(因为它们是出于多种原因的最佳实践),Microsoft决定在C#3中包含此功能,以便您更轻松地声明属性。
以下是创建属性的标准方法:
String foo;
public String Foo
{
get { return this.foo }
set { this.foo = value; }
}
现在这需要相当多的打字,而且由于开发人员对核心很懒,有时我们很想创建公共字段以节省一些时间。
现在使用C#3编译器,我们可以这样做:
public String Foo { get; set; }
虽然这看起来有点奇怪,但请考虑编译器代表您做的工作。之前的代码被编译为:
[CompilerGenerated]
private string <Foo>k__BackingField;
public string Foo
{
[CompilerGenerated]
get
{
return this.<Foo>k__BackingField;
}
[CompilerGenerated]
set
{
this.<Foo>k__BackingField = value;
}
}
所以即使语法看起来有点奇怪,你仍然会按照以前的方式创建一个属性。
答案 3 :(得分:7)
它被称为自动或auto-implemented属性,并不是抽象的。您可以按原样使用该属性。编译器将在幕后为它创建一个后备存储。
这非常类似于使用字段而不是属性,但是您获得属性语义,并且可以将其用于需要属性的数据绑定之类的事情。
答案 4 :(得分:7)
它是一个属性的简写,它不再执行将值存储在字段中的功能。所以它等同于:
private Class1 _myVar;
public Class1 myVar
{
get{ return _myVar; }
set{ _myVar = value;}
}
它只是一个简单的属性,以后可以用更复杂的evantuation替换而不改变界面。
答案 5 :(得分:2)
这些是自动实施的属性。它们允许您使代码更简洁。您可以在这里阅读更多相关信息:
您还可以使访问者具有不同的访问级别:
public int MyVar {get;私人集; }
这允许您公开类外部的属性,并仍在内部进行设置。
答案 6 :(得分:0)
自动获取和设置器。