2009-06-06 24 views
1

Ich schaue auf eine VB.NET-Klasse (die ich nicht geschrieben habe), die (abstract in C#, glaube ich), die drei Methoden definiert hat, die alle als Shared definiert sind (static in C#). In der Klasse gibt es keine Eigenschaften oder Felder - nur die drei Methoden. Aus einer OO-Perspektive macht das einen Sinn?MustInherit und gemeinsame Funktionen

Mein Denken ist nicht, weil durch sie MustInherit machen, sind Sie im Wesentlichen sagen Sie nicht eine Instanz dieser Klasse erstellen können - Sie davon erben müssen und eine Instanz des schaffen abgeleitet Klasse. Aber da alle Methoden gemeinsam genutzt werden, werden Sie niemals tatsächlich eine Instanz der Elternklasse erstellen, so dass die nicht gut tut. Sie könnten auch nicht markieren Sie es MustInherit und erben nur von ihm wann immer Sie wollen.

Gibt es eine Situation, in der das Erstellen einer Klasse auf diese Weise sinnvoll ist?

Antwort

2

instanziiert ist Wie andere schon gesagt haben, klingt es so, als wollten sie wirklich eine C# statische Klasse. VBs Äquivalent zu "statisch" ist "shared", aber Sie können in VB keine Klassen "shared" markieren. Der Unterschied besteht darin, dass jemand von dieser Klasse erben und dann eine Instanz erstellen kann. C# statische Klassen sind versiegelt.

Was sie sollte getan haben, ist eine Module verwenden. Eine VB Module und die statische C# -Klasse sind praktisch identisch: Mitglieder sind dem Typ und nicht einer Instanz zugeordnet, und Sie können nicht von ihnen erben.

+0

Module werden automatisch in einen Namespace importiert. Dies könnte ein Grund sein, KEINE zu verwenden. – jmoreno

0

Aus einer OO-Perspektive macht dies nicht viel Sinn.

VB hat jedoch keine Möglichkeit, eine Klasse wie Shared als Shared zu kennzeichnen. In C# würden Sie diese Klasse wahrscheinlich als static class kennzeichnen. MustInherit wurde höchstwahrscheinlich hinzugefügt, um zu verhindern, dass Benutzer eine Instanz davon erstellen, obwohl es sich im Grunde um eine statische Klasse handelt.

+0

Eine Klasse deklarieren Ein Modul in VB wird im Grunde in C# als statisch deklariert. Es ist seit VB7 da. –

0

In C# eine Klasse als statisches (= Geteilt) deklariert werden, und ich denke, VB.NET erlaubt nicht, dass, um dieses Problem zu umgehen ist es abstrakt markiert (MustInherit), so dass es nie

Verwandte Themen