Невиртуальность интерфейсов
От: dluciv Россия  
Дата: 07.03.07 10:05
Оценка:
Вот интересно, при реализации интерфейсов по идее должен использоваться такой же механизм виртуального переопределения, как при реализации абстрактных методов. Однако по умолчанию методы и свойства, реализующие интерфейс, не виртуальные.

Версии:

А как (и почему) на самом деле?
Re: Невиртуальность интерфейсов
От: MatFiz Россия  
Дата: 07.03.07 10:28
Оценка:
Здравствуйте, dluciv, Вы писали:

D>А как (и почему) на самом деле?


У Рихтера написано, что если не указано, компилятор подставляет virtual sealed неявно.
How are YOU doin'?
Re: Невиртуальность интерфейсов
От: Lloyd Россия  
Дата: 07.03.07 10:34
Оценка:
Здравствуйте, dluciv, Вы писали:

D>А как (и почему) на самом деле?


Принцип очень простой — если хочешь какую-то фичу, нужно объявить об этом явно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Невиртуальность интерфейсов
От: dluciv Россия  
Дата: 07.03.07 11:09
Оценка:
Спасибо. Хорошо хоть не платформа, а компилятор .

MF>Здравствуйте, dluciv, Вы писали:


D>>А как (и почему) на самом деле?


MF>У Рихтера написано, что если не указано, компилятор подставляет virtual sealed неявно.
Re[2]: Невиртуальность интерфейсов
От: dluciv Россия  
Дата: 07.03.07 11:10
Оценка:
Вот я про это и спросил. А тут компилятор неявно подставляет override sealed, как мне уже ответили.

L>Здравствуйте, dluciv, Вы писали:


D>>А как (и почему) на самом деле?


L>Принцип очень простой — если хочешь какую-то фичу, нужно объявить об этом явно.
Re[2]: Невиртуальность интерфейсов
От: Dufrenite Дания  
Дата: 07.03.07 16:04
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>Здравствуйте, dluciv, Вы писали:


D>>А как (и почему) на самом деле?


MF>У Рихтера написано, что если не указано, компилятор подставляет virtual sealed неявно.


Странно, запускаем рефлектор и видим, что в реализации интерфейсного метода нет ключевых слов virtual и sealed.
Если включить дизассемблирование в отладчике, то видно, что механизм вызовов совершенно разный.
По видимому дело в чём-то другом...
Re[3]: Невиртуальность интерфейсов
От: Lloyd Россия  
Дата: 07.03.07 16:18
Оценка:
Здравствуйте, Dufrenite, Вы писали:

MF>>У Рихтера написано, что если не указано, компилятор подставляет virtual sealed неявно.


D>Странно, запускаем рефлектор и видим, что в реализации интерфейсного метода нет ключевых слов virtual и sealed.


Ты просто не туда смотрел:
.method public hidebysig newslot virtual final instance void Test() cil managed
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Невиртуальность интерфейсов
От: TK Лес кывт.рф
Дата: 07.03.07 19:41
Оценка:
Здравствуйте, dluciv, Вы писали:

D>Вот интересно, при реализации интерфейсов по идее должен использоваться такой же механизм виртуального переопределения, как при реализации абстрактных методов. Однако по умолчанию методы и свойства, реализующие интерфейс, не виртуальные.


Механизм будет как минимум другой. т.к. абстрактный метод это прераготива класса. При этом, классы не допускают множественное наследование а интерфейсы допускают т.е. механим реализации как минимум другой. Более того, разные методы разных интерфейсов могут отображаться на одну единственную реализацию.

В любом случае, почему добавление интерфейса к классу должно менять его поведение? Раз все методы по умолчанию не виртальные то, они должны и оставатся такими же.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Невиртуальность интерфейсов
От: Andrbig  
Дата: 09.03.07 08:48
Оценка:
Здравствуйте, TK, Вы писали:

TK>В любом случае, почему добавление интерфейса к классу должно менять его поведение? Раз все методы по умолчанию не виртальные то, они должны и оставатся такими же.


Вот именно. Методы объявлены как не виртуальные, а в коде получаем
.method public hidebysig newslot virtual final instance void Test() cil managed

Или это некая другая виртуальность?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.