2009-06-06 4 views
1

Я смотрю на класс VB.NET (который я не писал), который объявлен MustInherit (в C#, я считаю), который имеет три метода, все из которых определены как Shared (static в C#). В классе нет свойств или полей - только три метода. С точки зрения ОО, имеет ли это смысл?MustInherit и общие функции

Мое мышление нет, потому что, делая это MustInherit, вы, по сути говоря, вы не можете создать экземпляр этого класса - вы должны наследовать от него и создать экземпляр производным класса. Но так как все методы разделены, вы никогда не создадите экземпляр родительского класса, так что MustInherit не принесет пользы. Вы могли бы также не отметьте его MustInherit и просто наследуйте его, когда захотите.

Есть ли ситуация, когда создание класса таким образом имеет смысл?

ответ

2

Как говорили другие, похоже, что они действительно хотели статический класс C#. Эквивалент VB «static» является «общим», но вы не можете отмечать классы «shared» в VB. Разница в том, что кто-то мог наследовать этот класс, а затем создать экземпляр. Статические классы C# запечатаны.

Что они должно сделали - Module. Статические классы VB Module и C# практически идентичны: члены ассоциируются с типом, а не с экземпляром, и вы не можете наследовать их.

+0

Модули автоматически импортируются в пространство имен, что может быть причиной НЕ использовать его. – jmoreno

0

С точки зрения ОО, это не имеет большого смысла.

Однако VB не имеет возможности помечать класс как общий, например, C#. В C# вы, скорее всего, помечаете этот класс как static class. Вероятно, MustInherit был добавлен, чтобы попытаться помешать людям создать экземпляр этого объекта, даже если это в основном статический класс.

+0

Объявление класса Модуль в VB, в основном, объявлен как статический в C#. Это было с VB7. –

0

В C# класс может быть объявлен как статический (= Shared), и я думаю, что VB.NET не позволяет этого, так как обходной путь отмечается аннотация (MustInherit) так, чтобы он никогда не инстанцирован

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