Wieso object nicht abstrakt?
-
Gibt es irgendeinen logischen Grund, dass der Datentyp object nicht abstrakt ist? Ich meine, wann braucht man sowas hier?
object obj = new object();
-
Genutzt wird die Instanziierung von object sehr wohl, beispielsweise bei Multithreading Locks. Das könnte jedoch auch anders gelöst werden.
Die Frage ist doch, warum object abstrakt sein sollte.
Eine Klasse ist ja dann abstrakt, wenn auf aktueller Klassenhierarchieebene nicht alle benötigten Methoden sinnvoll ausimplementiert werden sollen / können. Da object für sich aber alle Methoden sinnvoll ausimplementiert, macht es m.E. keinen Sinn, die Klasse als abtrakt zu definieren.
-
Object zu verwenden macht u.a. Sinn, wenn der Inhalt der Variable unbekannt ist.
object o1 = 3; object o2 = "foo"; int i1 = (int) o1; string s1 = (string) o2;
Wobei man hier natürlich am besten mit Parse/TryParse arbeiten würde.
kann zB bei Konsolen-Eingaben sinnvoll sein.
-
marco.b schrieb:
Genutzt wird die Instanziierung von object sehr wohl, beispielsweise bei Multithreading Locks. Das könnte jedoch auch anders gelöst werden.
Hä?
marco.b schrieb:
Die Frage ist doch, warum object abstrakt sein sollte.
Weil object nur die Basisklasse ist, die für sich gesehen aber, soweit ich weiß, keinen Selbstzweck erfüllt.
marco.b schrieb:
Eine Klasse ist ja dann abstrakt, wenn auf aktueller Klassenhierarchieebene nicht alle benötigten Methoden sinnvoll ausimplementiert werden sollen / können.
Eine abstrakte Klasse muss nicht zwangsläufig abstrakte Methoden (Methoden, die nicht sinnvoll ausimplementiert werden) enthalten.
monstermax schrieb:
Object zu verwenden macht u.a. Sinn, wenn der Inhalt der Variable unbekannt ist.
object o1 = 3; object o2 = "foo"; int i1 = (int) o1; string s1 = (string) o2;
Wobei man hier natürlich am besten mit Parse/TryParse arbeiten würde.
kann zB bei Konsolen-Eingaben sinnvoll sein.Aber ein
object o = "Text";
würde auch funktionieren, wenn object abstrakt wär, denn diese Zeile entspricht ja der Anweisungobject o = new string("Text");
, also dem klassischenBasisklasse x = new AbgeleiteteKlasse();
. AberBasisklasse x = new Basisklasse();
macht mir bei object immer noch keinen Sinn. object stellt eben bloß die absolute Grundklasse zur Verfügung. Wann braucht man mal eine Variable, die rein vom Typ object ist?
-
Al Birdie schrieb:
marco.b schrieb:
Genutzt wird die Instanziierung von object sehr wohl, beispielsweise bei Multithreading Locks. Das könnte jedoch auch anders gelöst werden.
Hä?
Nicht hä... Doku gucken! lock Statement Gleich am Anfang steht auch glücklicherweise die Verwendung von Object die marco.b angesprochen hat.
-
Hä?
-
OK, für mich hat sich der Thread mit dem letzten Posting erledigt...