【发布时间】:2010-11-21 13:35:45
【问题描述】:
我经常在 C# 文档中看到这种安静。但它有什么作用呢?
public class Car
{
public Name { get; set; }
}
【问题讨论】:
-
我能问一下为什么这被标记为重复吗?这是2009年问的,2011年问的是“原版”!
标签: c# properties
我经常在 C# 文档中看到这种安静。但它有什么作用呢?
public class Car
{
public Name { get; set; }
}
【问题讨论】:
标签: c# properties
简单来说,它们被称为属性访问器。它们的实现可以解释如下
1.get{ 返回名称} get 访问器中的代码块在属性为 Read 时执行。
2.set{name = value} 当属性分配一个新值时,set 访问器中的代码块被执行。
例如(假设您使用的是 C#)
class Person
{
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
set
{
name = value;
}
}
}
现在当你在下面引用这个属性时
Person p = new Person();// 实例化类或创建对象 “人”类的“p”
System.Console.Write(p.Name); //The get accessor is invoked here
调用get访问器来读取属性的值,即编译器尝试读取字符串'name'的值。
2.当您分配一个值(使用参数)给“名称”属性时,如下所示
Person p = new Person();
p.Name = "Stack" // the set accessor is invoked here
Console.Writeline(p.Name) //invokes the get accessor
Console.ReadKey(); //Holds the output until a key is pressed
设置访问器分配值“Stack”到“Name”属性,即“Stack”存储在字符串“name”中。
输出:
堆栈
【讨论】:
set { name = value + "."; } 将在字符串中添加一个点。遵循同样的想法,get 可以在返回之前修改值。
总结:在 C# 3.0 及更高版本中,自动实现的属性使 属性声明更简洁 when 在不需要额外的逻辑 属性访问器。
【讨论】:
它被称为自动实现的属性并且是new to C# 3.0。当您对属性的访问不需要任何特殊行为或验证时,这是一种更简洁的语法。它的功能类似于:
public class Car
{
private string _name;
public string Name
{
get { return _name; }
set {_name = value; }
}
}
因此它节省了大量代码,但如果行为或规则需要更改,您可以稍后修改访问器逻辑。
【讨论】:
这是做的等价物:
private string _Text;
public string Text
{
get { return _Text; }
set { _Text = value; }
}
除非您在类中无权访问私有变量。
【讨论】:
它是以下的简写:
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
编译器生成成员变量。这称为automatic property。
【讨论】:
<>__name),但它作为 C# 标识符是无效的。这会阻止您直接从代码中访问该字段。规范术语是“自动实现的属性”,但大多数人确实称它为自动属性:)
public string Name; 不同?
这是一个自动读写属性。这是 C# 3.0 的补充。比如:
public class Car {
private string name;
public string Name { get { return name; } set { name = value; } }
}
除了你不能直接访问支持字段。
【讨论】: