好吧,所以我偶然發現了一個我不知道的自動生成的私有成員。隱式定義 - 衝突(自動生成的私有字段)
我知道如果你有一個名爲例如P
然後名稱get_P
被保留用於吸氣劑的方法和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」,其具有相同名稱的成員在類「測試衝突」。
2)WithEvents變量「FWE」隱式地定義「_fWE」,這與在類「測試」的相同名稱的成員衝突。
如果我刪除所有命名_{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
@Plutonix謝謝!您是否知道爲自動生成的字段設置後臺字段的目的? –
我已經在內部使用它在P可能會更改爲ReadOnly的類中,因此在您更改它時幾乎沒有任何更改。可能還有與繼承有關的原因,但我不能想到場景 – Plutonix