【发布时间】:2014-04-15 12:39:21
【问题描述】:
好的,所以我偶然发现了一个我不知道的自动生成的私人成员。
我知道,如果您有一个名为 e.g. P 然后名称 get_P 保留给 getter 方法,名称 set_P 保留给 setter 方法。
但我不知道的是,_P 这个名字也是保留的。似乎这只适用于属性(不是ReadOnly / WriteOnly)和字段定义为WithEvents。
Public Class Test
Public Property p As Object
Public WriteOnly Property pW() As Object
Set(value As Object)
End Set
End Property
Public ReadOnly Property pR() As Object
Get
End Get
End Property
Public f As Object
Public WithEvents fWE As Object
Private _p As Object
Private _pW As Object
Private _pR As Object
Private _f As Object
Private _fWE As Object
End Class
上面的类会产生如下错误:
1) 属性“p”隐式定义了“_p”,它与“Test”类中的同名成员冲突。
2) WithEvents 变量“fWE”隐式定义了“_fWE”,这与“Test”类中的同名成员冲突。
如果我删除所有名为_{name} 的字段并返回Test 类型的所有成员(包括NonPublic 字段),则可以清楚地看到自动生成的成员。
.cctor (Constructor)
.ctor (Constructor)
__ENCAddToList (Method)
__ENCList (Field)
_fWE (Field) <------------------------------- *2
_p (Field) <---------------------------------- *1
Equals (Method)
f (Field)
Finalize (Method)
fWE (Property)
get_fWE (Method)
get_p (Method)
get_pR (Method)
GetHashCode (Method)
GetType (Method)
MemberwiseClone (Method)
p (Property)
pR (Property)
pW (Property)
set_fWE (Method)
set_p (Method)
set_pW (Method)
ToString (Method)
那么有人知道为什么会生成这些字段和/或它们的用途吗?
【问题讨论】:
-
一个自动生成的属性创建 _P 变量作为支持字段,它允许您在本地引用它(
P = someValue或_p = someValue),就像任何其他属性一样。自动和手动实现的属性之间的代码确实没有太大区别。 -
@Plutonix 谢谢!您知道为自动生成的字段提供支持字段的目的吗?
-
我在类内部使用了它,其中 P 可能会更改为 ReadOnly,因此当您更改它时几乎没有什么可更改的。可能还有与继承有关的原因,但我想不出一个场景
标签: vb.net visual-studio-2010 .net-4.0