【发布时间】:2009-03-26 19:58:28
【问题描述】:
所以这里有一些我以前从未见过的语法,有人可以告诉我这是什么意思吗?不确定这是否应该是抽象属性声明或其他什么的简写。
public Class1 myVar { get; set; }
无论如何,Class1 是一个抽象类。
【问题讨论】:
标签: c# properties
所以这里有一些我以前从未见过的语法,有人可以告诉我这是什么意思吗?不确定这是否应该是抽象属性声明或其他什么的简写。
public Class1 myVar { get; set; }
无论如何,Class1 是一个抽象类。
【问题讨论】:
标签: c# properties
在 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; }
【讨论】:
这是让编译器为您创建(隐藏)字段的语法。
也很有用的是:
public Class1 myVar{ get; private set; }
【讨论】:
protected 也可以。就像private。我相当确定您也可以为 get 设置可访问性,但我从未尝试过。
set 操作只能由类成员函数完成。谢谢:-)
它可能看起来像一个抽象属性或来自接口的属性,但它远非如此。为了鼓励开发人员使用属性(由于许多原因它们是最佳实践),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;
}
}
因此,即使语法看起来有点奇怪,您仍然可以完全按照您习惯的方式创建属性。
【讨论】:
它被称为自动或auto-implemented 属性,它不是抽象的。您可以按原样使用该属性。编译器会在后台为其创建一个后备存储。
这很像只使用字段而不是属性,但是您可以获得属性语义,并且可以将其用于需要属性的数据绑定等事情。
【讨论】:
它是一个属性的简写,它只在字段中存储值。所以它相当于:
private Class1 _myVar;
public Class1 myVar
{
get{ return _myVar; }
set{ _myVar = value;}
}
它只是一个简单的属性,以后可以在不改变界面的情况下用更复杂的 evantuation 替换。
【讨论】:
这些是自动实现的属性。它们使您可以使代码更简洁。你可以在这里阅读更多关于它们的信息:
您还可以使访问器具有不同的访问级别:
公共 int MyVar { 获取;私人套装; }
这允许您将属性暴露给类外部并仍然在内部设置它。
【讨论】:
自动获取器和设置器。
【讨论】: