2008-12-01 18 views
6

In .net sind wir nicht erlaubt, Funktionen/Methoden in abstrakten Klassen und Schnittstellen zu teilen. Warum sind sie nicht erlaubt?Warum können wir Shared (statische) function/methods in einer Schnittstelle/abstrakten Klasse nicht haben?

Ist das gleiche in anderen Sprachen. wie Java?

Was kann das mögliche Problem sein, wenn die Shared-Methoden zulässig sind?

+0

Vielleicht sollten Sie Ihre Frage klären. Was genau meinst du mit "geteilt". Sie können Funktionen (oder Methoden) in abstrakten Klassen haben, die von abgeleiteten Klassen und anderen Klassen verwendet werden können - das ist der springende Punkt. –

+0

@ Christian.K 'Shared' ist zu VB, was 'statisch' ist C# – Grokodile

+0

@panamack: Duh! Vielen Dank. Ratet mal, dass sich "Public static (Shared in Visual Basic)" MSDN Phrase für mich nicht gelohnt hat ;-) –

Antwort

11

Sie können sicherlich statische (geteilte) Methoden in abstrakten Klassen haben. Sie können sie jedoch nicht in Schnittstellen haben.

Es klingt wie Sie wirklich wollen virtuelle statische/geteilte Methoden - und diese sind nicht verfügbar. Statische Methoden werden nicht polymorphisch genannt, und mit der Art, wie am meisten von .NET funktioniert, würde das nicht viel Sinn machen. Es wäre sinnvoll, statische Methoden in Interfaces angeben zu können, wenn diese als Typ-Parameter-Constraints verwendet werden - an idea I've blogged about before now.

Delphi hat das Konzept einer Meta-Klasse, wo (wie ich es verstehe) Instanz Methoden in einer Klasse Meta-Klasse sind wie statische Methoden in der Klasse selbst - und eine Meta-Klasse kann von einem anderen ableiten, die Methoden usw. Ich bin kein Delphi-Programmierer, aber chapter 2 of Delphi in a Nutshell könnte Ihnen nützlich sein, wenn Sie weitere Informationen wünschen.

Java erlaubt die Angabe von Konstanten in Schnittstellen, aber das ist die einzige Art von statischem Member, die dort unterstützt wird.

Interessanterweise erlaubt die CLI selbst statische Methoden in einer Schnittstelle, aber das ist Methoden mit Körpern - nicht nur die Signatur, die von Instanzelementen einer Schnittstelle bereitgestellt wird.

+0

Sie haben Recht "Es klingt wie Sie wirklich virtuelle statische/geteilte Methoden wollen". – Biswanath

+0

Delphi macht das in .Net tatsächlich, indem es eine Meta-Klasse hat. Aber da es nicht von .NET unterstützt wird, kann keine andere .NET-Sprache diese Methoden aufrufen –

+0

So habe ich verschiedene Klassen, die jeweils an einem meiner benutzerdefinierten Steuerelemente arbeiten, aber es ist nicht notwendig, ein Objekt der Klasse so zu instanziieren Ich mache alle Methoden darin geteilt. Nachdem ich einige von ihnen fertiggestellt hatte, bemerkte ich ein Muster, dem ich für den Rest folgen wollte. Also versuche ich eine Schnittstelle/abstrakte Klasse zu extrahieren, aber ich kann nicht. Sie sagen mir, dass es in .NET keine Möglichkeit gibt, das zu tun? – Nick

Verwandte Themen