这是什么意思 ?公共名称{get; 组;}

Sla*_*abo 47 c# properties

我经常在C#文档中看到这种情况.但是它做了什么?

public class Car
{
   public Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Bry*_*tts 48

它是以下的简写:

private string _name;

public string Name
{
    get { return _name; }
    set { _name = value; }
}
Run Code Online (Sandbox Code Playgroud)

编译器生成成员变量.这称为自动属性.

  • ...虽然该字段的名称实际上是一个"不可言状"的名称(例如`<> __ name`),它作为C#标识符无效.这会阻止您直接从代码中访问该字段.规范术语是"自动实现的属性",但大多数人确实称它为自动属性:) (10认同)
  • ... 但为什么_?为什么_any_不同于`public string Name;`? (6认同)

小智 33

简单来说,它们被称为属性访问者.它们的实现可以解释如下

1.get {return name}当属性为Read时,执行get访问器中的代码块.

2.set {name = value}当属性为Assigned a new value 时,将执行set accessor中的代码块.

例如.(假设您使用的是C#)

 class Person
 {
     private string name;  // the name field
     public string Name    // the Name property
     {
         get
         {
             return name;
         }
         set
         {
             name = value;
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)
  1. 现在当你引用这个属性如下

    Person p = new Person(); //实例化类或创建类'Person'的对象'p'

    System.Console.Write(p.Name);  //The get accessor is invoked here
    
    Run Code Online (Sandbox Code Playgroud)

get访问被调用来,即编译器试图读取字符串"名"的值的属性的值.

2.当您值(使用参数)分配给'Name'属性时,如下所示

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
Run Code Online (Sandbox Code Playgroud)

set访问器将值'Stack' 分配给'Name属性,即'Stack'存储在字符串'name'中.

输出继电器:

  • 首先获得并设置的原因是什么,为什么不只是使用一个访问器进行设置和获取,这是一个似乎没有人能够简单回答的问题. (9认同)

Meh*_*ari 10

这是一个自动读写属性.这是C#3.0的补充.就像是:

public class Car {
    private string name;
    public string Name { get { return name; } set { name = value; } }
}
Run Code Online (Sandbox Code Playgroud)

除了你不能直接访问支持字段.