【问题标题】:What is the accessibility of the backing fields of auto-implemented properties?自动实现属性的支持字段的可访问性是什么?
【发布时间】:2019-04-03 18:28:49
【问题描述】:

支持字段是自动私有的 - 我说的对吗?

class Car
{
    public String Mark { get; set; }
    public String Model { get; set; }
}

【问题讨论】:

  • 自动私有是什么意思?
  • 您是在询问带有public 访问修饰符的属性是否为private?或者如果班级是private?还是别的什么?
  • 属性MarkModel 是自动实现的属性,默认情况下它们可以访问私有字段。
  • 在公共属性后面我们有字段(字符串标记和字符串模型)吗?他们是私人的吗?
  • 是的,在编译器后面创建私有支持字段。

标签: c# private encapsulation accessor


【解决方案1】:

自动实现的属性:

public String Mark { get; set; }
public String Model { get; set; }

当您如示例中所示声明自动实现时,编译器会创建一个私有的匿名支持字段,该字段只能通过属性的 get 和 set 访问器访问。

private string mark;
private string model;
public String Mark { 
   get
   {
   return mark;
   }
   set
   {
   mark = value;
   }
}
public String Model{ 
   get
   {
   return model;
   }
   set
   {
   model = value;
   }
}

【讨论】:

  • 好吧,他们不会被命名为markmodel,但是是的,除了这个答案是正确的。
【解决方案2】:

class Car
{
    public string Mark { get; set; }
    string Model { get; set; }
}
  • Car 类是内部的。
  • Mark 的属性是公开的。
  • Model 的属性是私有的。

cmets 似乎表明您正在询问支持字段的可访问性。

这两个属性都是Auto-Implemented Properties (C# Programming Guide),有一个隐藏的、不可访问的支持字段。 C# 自动实现属性的文档说:

当您声明一个属性 [...] 时,编译器会创建一个私有的匿名支持字段,该字段只能通过该属性的 get 和 set 访问器进行访问。

这在 VB 中是不同的,后者可以从类中访问支持字段:Auto-Implemented Properties (Visual Basic)

另见:What are the default access modifiers in C#?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多