В C # это нормально для виртуализации каждого метода? - PullRequest
3 голосов
/ 10 сентября 2011

Это может заставить многих программистов на C # съежиться, но можно ли virtual -ize каждый метод в базовом классе - даже если некоторые методы никогда не переопределяются?

Причина, по которой мне нужно это сделать, заключается в том, что у меня есть особый случай, когда мне нужно, чтобы C # действовал как Java.На самом деле это автоматическое преобразование программы Java-программы.

Я думаю пометить любой Java-метод, у которого нет базового метода, как virtual, а любой, у которого есть связанный базовый метод, - override.

Помимо недостатка гибкости, есть ли другие проблемы с этим?

Ответы [ 3 ]

7 голосов
/ 10 сентября 2011

Да, это нормально, но не обязательно хорошая практика.Виртуализация помогает в двух вещах: наследование и разделение (для таких вещей, как модульное тестирование или замена других классов новыми).Предпочитайте композицию над наследованием в своем проекте ОО, и вы можете использовать интерфейсы вместо виртуальных с вашими классами.Это даст вам то, что вам нужно как для модульного тестирования, так и для композиции.Но, учитывая скорость современных процессоров, я бы не стал сильно беспокоиться о дополнительном поиске V-таблиц, если все виртуально.

Поэтому я предлагаю, если вы можете решить свою проблему, предоставив интерфейс для Javaпрограмма, сделай это.В противном случае не теряйте сон из-за виртуальных методов.

5 голосов
/ 10 сентября 2011

Мало того, что это нормально, но некоторые приложения нуждаются в этом.

nHibernate требует чтобы пометить свойства как виртуальные для отображения, например.

1 голос
/ 10 сентября 2011

Это нормально.Это не приведет к нежелательному поведению, вызванному этим, и, насколько я знаю, виртуальные методы не приводят к замедлению работы классов.Так почему бы и нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...