2009-09-07 55 views
0

如果您在反射器中查看DataGridViewTextBoxCell屬性ValueType,則可以看到它覆蓋了DataGridViewCell中的屬性。DataGridViewTextBoxCell中的奇怪屬性覆蓋

奇怪的是,overriden屬性是隻讀的,但父類中的屬性是讀寫的。

我只能假設該屬性已被遮蔽,而反射器沒有...呃..反映這一點。

這是正確的嗎?

eta:我正在將源代碼反射器視爲vb.net。

回答

1

CLR在內部將屬性實現爲方法。每個處理器都會有一個方法。所以如果你的財產是讀/寫,你將有兩種方法。如果你的方法是隻讀或只寫的,那麼你將只有一種方法。

如果您選擇IL而不是Visual Basic,您可以看到自己使用反射器。


.method public hidebysig specialname virtual instance class [mscorlib]System.Type get_ValueType() cil managed 

如果用ToString方法comapre ...


.method public hidebysig virtual instance string ToString() cil managed 

...你會注意到,這兩個開始 「方法」。

由於您有兩種方法,您可以相互獨立地重寫它們。

+0

我從來沒有意識到可以只重寫其中一個訪問器......這很好理解!然而,我覺得它很混亂,因爲重寫的屬性似乎是隻讀的,即使它不是... – 2009-09-08 00:14:06

+0

我還是有點困惑。我知道屬性聲明被翻譯成2種方法,但至少在vb.net中,無法重寫讀寫屬性,只是重寫get - 至少不是沒有shadows關鍵字。 – Jules 2009-09-08 08:58:24

+0

是的..你說得對。昨天我用C#測試了它,並且因爲它工作,我認爲它也可以在VB.NET上工作。現在我嘗試了VB.NET,但沒有找到一種方法來使它工作。解決方法是放置一個訪問基本setter的setter。 – 2009-09-08 10:07:20