Wie können Sie eine nicht instanziierbare Klasse erstellen? Ein Weg besteht darin, es als eine abstrakte Klasse zu deklarieren. Ist es möglich, den Klassenkonstruktor als privat zu definieren? Ist eine versiegelte Klasse nicht instanziierbar? Und gibt es andere Möglichkeiten, dies in C# zu tun?Wie kann eine Klasse deklariert werden, die nicht instanziiert werden kann?
Antwort
Das Markieren einer Klasse als abstrakt oder statisch (sie schließen sich gegenseitig aus) sind die einzigen beiden Möglichkeiten. Wenn alle Konstruktoren als privat markiert werden, wird die Klasse nicht unstanziierbar, da die Klasse sich selbst noch konstruieren kann, während andere dies möglicherweise über Reflektion tun können.
Wie von anderen beantwortet, können abstrakte und statische Klassen nicht instanziiert werden. Eine Klasse mit einem privaten Konstruktor kann jedoch mithilfe einer öffentlichen Elementfunktion erstellt werden. So funktioniert das Muster singleton
Nur static
sieht hier wie vollständige Lösung aus, da die Klasse abstract
immer noch instanziiert werden kann, wenn die Klasseninstanz, die von ihr erbt, instanziiert wird. Stellen Sie sich das Szenario vor:
abstract class A { }
class B : A { }
somewhere in code :
B instance = new B(); // this creates instance of class A as well
P.S. i Zunächst aber, dass abstract sealed
Lösung für dieses Problem auch sein könnte, aber es macht nicht viel Sinn machen, eine solche Konstruktion zu verwenden, so dass es nicht einmal kompilieren:
Error 1 'A': an abstract class cannot be sealed or static D:\Projects\TEST\Testapp\Program.cs 15 27 ITT.Domain
Ich stimme zu. In .Net können Sie eine Stream-Instanz erhalten. Natürlich wird das immer eine Instanz einer Unterklasse von Stream sein. Aber für den Code innerhalb der Stream-Klasse und außerhalb der Stream-Klasse ist die Instanz immer noch eine Instanz. –
Was ist abstrakt versiegelt? Kann jemand erklären, was es ist? – kakkarot
schöne Erwähnung aber abstrakt versiegelt ist nicht möglich. –
sind nur sichtbar innerhalb Ihrer Baugruppe und kann daher nicht außerhalb dieser Baugruppe instanziiert werden.
Aber soweit ich weiß, könnten Sie immer noch eine Instanz über Reflektion erstellen. Sie Reflexion über ReflectionPermission Class
deaktivieren Wie oben erwähnt können Sie es als abstrakte oder fügen Sie eine abstrakte Methode erklären könnte.
Wenn Sie nur einen Vertrag deklarieren möchten, können Sie eine Schnittstelle verwenden, aber das ist überhaupt keine Klasse.
versiegelt bedeutet, dass Sie nicht diese Klasse kann
Singletons Klassen erben kann nur einmal singleton
was tun Sie mit der Klasse zu tun, wollen sehen pro Anwendung erstellt werden? – Jay
Antwort = Statische Klasse – MajkeloDev
Abstrakte Klasse, statische Klasse, die nicht instanziiert werden kann – Dragon