Kann nicht erstellen Sie eine Instanz der abstrakten Klasse oder Schnittstelle
Habe ich eine Klasse und ein interface, und wenn ich es versuche zum instanziieren des interface, bekomme ich eine Fehlermeldung:
Kann nicht erstellen Sie eine Instanz der abstrakten Klasse oder Schnittstelle
Mein code ist unten:
namespace MyNamespace
{
public interface IUser
{
int Property1 { get; set; }
string Property2 { get; set; }
string Property3 { get; set; }
void GetUser();
}
public class User : IUser
{
public int Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public void GetUser()
{
//some logic here......
}
}
}
Wenn ich es versuche zum instanziieren IUser user = new IUser();
bekomme ich eine Fehlermeldung:
Kann nicht erstellen Sie eine Instanz der abstrakten Klasse oder Schnittstelle
Was mache ich hier falsch?
InformationsquelleAutor der Frage Alex | 2011-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Fehlermeldung scheint selbsterklärend. Sie können nicht instanziieren eine Instanz einer Schnittstelle, und Sie haben erklärt
IUser
als Schnittstelle. (Das gleiche gilt für abstrakte Klassen.) Der ganze Sinn einer Schnittstelle ist, dass es nicht tun nichts—es gibt keine implementation für seine Methoden.Jedoch, Sie kann instanziieren eine Instanz einer Klasse, die implementiertdass die Schnittstelle (stellt eine Implementierung für die Methoden), die in Ihrem Fall ist die
User
Klasse.Somit muss der code wie folgt Aussehen:
Dieser erzeugt eine Instanz der
User
Klasse (für die Umsetzung), und weist es einem Objekt-variable für den Typ des interfaces (IUser
bietet die Schnittstelle, die Art und Weise, in denen Sie als Programmierer können die Interaktion mit dem Objekt).Natürlich könnte man auch schreiben:
erzeugt eine Instanz der
User
Klasse und weist es einem Objekt variable vom gleichen Typ, aber diese Art von Niederlagen der Zweck einer Definition über eine separate Schnittstelle in den ersten Platz.InformationsquelleAutor der Antwort Cody Gray
Vorstellen, wenn man ging in einen laden und fragte nach einem Gerät mit Netzschalter. Sie wollte nicht sagen, ob Sie wollte, einen Kopierer, Fernseher, Staubsauger, Schreibtisch-Lampe, Waffeleisen, oder nichts. Sie fragte, für ein Gerät mit einem Netzschalter. Würden Sie erwarten, dass die Schreiber bieten Ihnen etwas, was man nur beschrieben werden als "ein Gerät mit einem Netzschalter"?
Eine typische interface-wäre Analog zu der Beschreibung "ein Gerät mit einem power-Schalter". Zu wissen, dass ein Stück der Ausrüstung "ein Gerät mit einem power-Schalter" ermöglichen würde, um einige Operationen (d.h. drehen Sie es auf und ab), und man könnte plausibel möchte eine Liste mit z.B. "Geräte mit power-switches müssen ausgeschaltet sein, am Ende des Tages", ohne die Geräte zu teilen eine charakteristische darüber hinaus mit einer power-Schalter, aber solche Situationen in der Regel nur angewendet, wenn die Anwendung einiger gemeinsamer Betrieb von Geräten, die erstellt wurden für einige Besondere Zwecke. Wenn die Schaffung von etwas aus dem nichts, würde man eher Zauberstab ein "Kopierer", "Fernsehen", "Vakuum-cleaner", oder andere bestimmte Art von Gerät, als einige random "- Gerät mit den Netzschalter".
Gibt es einige Situationen, in denen man möchte einen vage definierten Objekt, und wirklich nicht darum kümmern, was genau es ist. "Geben Sie mir Ihren billigsten Gerät, das Wasser kocht". Es wäre schön, wenn man angeben konnte, dass, wenn jemand fragt, für ein beliebiges Objekt mit "Wasser Kochen" Fähigkeit, Sie sollte angeboten werden, einen Acme 359 Elektrische Wasserkessel, und zwar bei Verwendung von Klassen ist es möglich, das zu tun. Beachten Sie jedoch, dass jemand, der fragt, für ein "Gerät zum Kochen von Wasser", nicht "Gerät, Wasser zu Kochen", sondern eine "Acme 359 Elektrische Wasserkessel".
InformationsquelleAutor der Antwort supercat
IUser
ist die Schnittstelle können Sie nicht instantiieren der Schnittstelle.Müssen Sie instanziieren die konkrete Klasse, die die Schnittstelle implementiert.
oder
InformationsquelleAutor der Antwort ChrisBint
Können Sie nicht instanziieren, Schnittstellen oder abstrakte Klassen.
Weil es nicht jeder Logik.
Schnittstellen bieten eine Vertrag der Methoden sollte eine Klasse ohne Implementierung. (Es gibt also keine Logik im interface).
Abstrakte Klassen grundlegende Logik einer Klasse, aber sind nicht voll funktionstüchtig (nicht alles was implementiert ist). Also nochmal, Sie werden nicht in der Lage, etwas zu tun.
InformationsquelleAutor der Antwort Yochai Timmer
Können Sie nicht instanziieren, eine abstrakte Klasse oder ein interface. Sie müssen die Erben, wenn es eine abstrakte Klasse oder implementieren, wenn es eine Schnittstelle. z.B.
InformationsquelleAutor der Antwort George Johnston
Es ist, was es sagt, man kann nur abstrakte Klasse instanziiert werden. Sie implementieren müssen, um es zuerst, dann instanziieren dieser Klasse.
InformationsquelleAutor der Antwort Erkan Haspulat