2009-09-07 5 views
0

Если вы посмотрите на свойство DataGridViewTextBoxCell, ValueType, в отражателе, вы можете увидеть, что он переопределяет свойство из DataGridViewCell.Странное переопределение свойств в DataGridViewTextBoxCell

Странная вещь заключается в том, что свойство overriden является readonly, но свойство в родительском классе считывается и записывается.

Я могу только предположить, что свойство было затенено и отражатель не ... erm .. отражают это.

Это право?

eta: Я смотрю на источник, в отражателе, как vb.net.

ответ

1

CLR реализует свойства как методы. Для каждого из них будет один метод. Поэтому, если ваша собственность читается/записывается, у вас будет два метода. Если ваш метод доступен только для чтения или только для записи, тогда у вас будет только один метод.

Вы можете увидеть это для себя, используя Reflector, если вы выберете IL вместо Visual Basic.


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

Если вы comapre с помощью метода ToString ...


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

... вы заметите, что оба начинаются с ".method".

Поскольку у вас есть два метода, вы можете переопределить их независимо друг от друга.

+0

Я никогда не понимал, что можно переопределить только одного из аксессуаров ... это полезно знать! Тем не менее, я считаю это довольно запутанным, потому что переопределенное свойство похоже на чтение, хотя это не так ... –

+0

Я все еще немного смущен. Я понимаю, что объявление свойства переведено на 2 метода, но, по крайней мере, в vb.net невозможно переопределить свойство чтения и записи и просто переопределить get - по крайней мере, не без ключевого слова shadow. – Jules

+0

Да. Вы правы. Вчера я тестировал его с помощью C#, и поскольку он работал, я предположил, что он будет работать и на VB.NET. Теперь я попробовал это на VB.NET, но не нашел способ заставить его работать. Обходным путем было бы установить сеттер, который обращается к базовому сетевому устройству. –

Смежные вопросы