Warum wird jede Klasse in .Net von System.Object abgeleitet? was sind die Vorteile?

8

Warum wird jede Klasse in .NET von System.Object abgeleitet? Was sind die Vorteile?

    
Ram 23.08.2010, 06:59
quelle

4 Antworten

4

Ich stelle Ihnen die gegenteilige Frage: warum nicht? Wenn nicht für einen gemeinsamen Vorfahren, wie würden Sie einen Verweis auf "irgendein Objekt von irgendeinem Typ" haben? Manchmal ist das nötig. Die Klasse System.Object enthält jedoch einige nützliche Methoden, die im Allgemeinen nützlich sind für jeden Typ:

  • Equals hilft beim Test auf Gleichheit
  • GetHashCode hilft bei der Leistung in Sammlungen
  • GetType - Alle Objekte haben einen Typ
  • Finalize zur Unterstützung der CLR-Finalisierung

Da diese Dinge allen Typen gemeinsam sind, können Sie Code (auch vor Generika) verwenden, der auf verschiedene Arten intelligent funktioniert.

Allerdings haben sie in C # 4.0 dynamic eingeführt, was wirklich eine eigene Klassenhierarchie ist. Es umgeht die statische Typprüfung komplett und ist nicht unbedingt von object abgeleitet. MSDN hat einen guten Artikel darüber und Chris Burrows Blog-Serie ist auch interessant.

    
Chris Schmich 23.08.2010, 07:04
quelle
1

Wenn alles von einer einzigen Klasse abgeleitet ist, können Sie Verhaltensweisen haben, die universell sind - wie "ist", "as", ToString () und GetHashCode (). Sie können diese Operatoren / Methoden für jede Variable verwenden.

Sie können auch generisch alles als "Objekt" übergeben, was viel schöner ist als die Verwendung von void-Zeigern.

    
Jason Williams 23.08.2010 07:02
quelle
0

Ohne dieses Verhalten:

  • Es wäre fast unmöglich, Objekte verschiedener Klassen mit der Equals () -Methode zu vergleichen.
  • Sie können Instanzen Ihrer Klasse nicht in den standardmäßigen (nicht generischen) Sammlungen speichern.
  • Sie könnten sich nicht auf eine implizite Konvertierung in den String-Typ verlassen.

Auch wenn ich mich nicht irre, dreht sich das gesamte Speicherverwaltungsmodell von .NET um den System.Object-Typ.

    
Bradley Smith 23.08.2010 07:04
quelle
0

In der verwalteten Welt opfern Sie die Verwendung von Zeigern, aber Sie haben Referenzen. Während du so etwas nicht haben kannst:

%Vor%

Sie können dies für Verweistypen (und Werttypen über Boxen, aber das ist nicht wirklich die gleiche Sache) dank Vererbung haben:

%Vor%

Natürlich gibt es andere Vorteile, aber ich habe hauptsächlich gesehen, dass object als Ersatz für ungültige Zeiger verwendet wird.

    
Siege 23.08.2010 07:07
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

Ich möchte eine kleine Android-App entwickeln, um den aktuellen Geräuschpegel zu messen (wahrscheinlich in dB). Aber ich habe keine Ahnung, wonach ich in den Bibliotheken suchen soll. Ich möchte den Lärm nicht aufzeichnen. Kann mir jemand einen Zeiger auf welche Klassen geben?

    
___ answer7826357 ___

Das folgende Code-Snippet zeigt, wie wir den Rauschpegel in der Vergangenheit erhalten haben. Leider zeigt die Dokumentation nicht, welche Einheit #getMaxAmplitude () zurückgibt.

%Vor%     
___ tag123mikrofon ___ Ein Mikrofon ist ein akustisch-elektrischer Wandler oder Sensor, der Schall in ein elektrisches Signal umwandelt. ___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ tag123noise ___ Rauschen ist eine zufällige Variation in einem Signal, zum Beispiel Fehler bei der Messung der Position eines sich bewegenden Objekts. ___ answer3567870 ___

Ich empfehle, in diesen Klassen zu suchen:

%Vor%

Wir haben sie im Blinkendroid-Audiopaket vor kurzem.

    
___ ___ qstnhdr Abfrage Geräuschpegels in Android ___ answer8007089 ___

Für mich ' %code% ' war nicht hilfreich. Ich erreichte schließlich mein Ziel nach dem Tag der forsch. Android: AudioRecord Klasse Problem Sie können meine Lösung finden Sie hier : Rückruf nie aufgerufen

    
___