在什么情况下,C#中的公共属性不生成私有变量?

在什么情况下,C#中的公共属性不生成私有变量?,c#,properties,C#,Properties,我用C#指定了一个公共属性,如下所示: public bool SuezCanalTransversal {get; set;} private int _suezCanalTransversal; public int SuezCanalTransversal { { get return _suezCanalTransversal; } { set _suezCanalTransversal = value; } } 但是,似乎没有创建私有成员变量。例如,如果我覆盖get,

我用C#指定了一个公共属性,如下所示:

public bool SuezCanalTransversal {get; set;}
private int _suezCanalTransversal;

public int SuezCanalTransversal
{
   { get return _suezCanalTransversal; }
   { set _suezCanalTransversal = value; }
}
但是,似乎没有创建私有成员变量。例如,如果我覆盖get,并
返回_suezCanalTransversal我看到:

“\u suezcantrascular在当前上下文中不存在”

我自己简单地添加关联的私有成员变量是没有问题的,但我的印象是,这现在是自动完成的

有几个问题:

何时为公共属性自动生成私有成员变量,何时不自动生成


当使用诸如
public bool suezcantrascular{get;set;}
之类的公共属性时,是否可以假定一个私有变量:
private bool\u suezcantrascular
将被创建?

编译器生成支持变量,而且,您不能依赖于用于命名支持变量的任何命名约定或模式

支持变量仅在编译时声明,因此您无法在源代码中访问它

如果您想访问支持变量,只有一种解决方案:不要使用自动属性,而是将属性声明为“old skool”,如下所示:

public bool SuezCanalTransversal {get; set;}
private int _suezCanalTransversal;

public int SuezCanalTransversal
{
   { get return _suezCanalTransversal; }
   { set _suezCanalTransversal = value; }
}

编译器生成支持变量,您不能依赖于用于命名该支持变量的任何命名约定或模式

支持变量仅在编译时声明,因此您无法在源代码中访问它

如果您想访问支持变量,只有一种解决方案:不要使用自动属性,而是将属性声明为“old skool”,如下所示:

public bool SuezCanalTransversal {get; set;}
private int _suezCanalTransversal;

public int SuezCanalTransversal
{
   { get return _suezCanalTransversal; }
   { set _suezCanalTransversal = value; }
}

请参阅。有一个私有变量的可能副本,但它有一个不同的编译器生成的名称,您无法访问它(反射除外),您不应该能够访问它;你应该使用这个属性。旁注:你来自VB.net吗?在vb中,可以在设计时访问以我为目标的私有成员。“\u PropertyName”请参见。可能存在一个私有变量的重复项,但它有一个不同的编译器生成的名称,您无法访问它(反射除外),您不应该能够访问它;你应该使用这个属性。旁注:你来自VB.net吗?在vb中,可以在设计时访问针对我的私人成员。“\u PropertyName”