System::Object-Klasse
Object class
Basisklasse, die die Verwendung von Methoden ermöglicht, die für die System.Object-Klasse in C# verfügbar sind. Alle nicht‑trivialen Klassen, die in der übersetzten Umgebung verwendet werden, sollten sie erben.
class Object
Methoden
| Methode | Beschreibung |
|---|---|
| virtual Equals(ptr) | Vergleicht Objekte nach den C#-Semantiken von Object.Equals. |
| static Equals(T1 const&, T2 const&) | Vergleicht Referenztyp‑Objekte im C#‑Stil. |
| static Equals(T1 const&, T2 const&) | Vergleicht Werttyp‑Objekte im C#‑Stil. |
| static Equals(float const&, float const&) | Emuliert den C#‑artigen Gleitkomma‑Vergleich, bei dem zwei NaNs als gleich betrachtet werden, obwohl NaN gemäß IEC 60559:1989 zu keinem Wert, einschließlich NaN, gleich ist. |
| static Equals(double const&, double const&) | Emuliert den C#‑artigen Gleitkomma‑Vergleich, bei dem zwei NaNs als gleich betrachtet werden, obwohl NaN gemäß IEC 60559:1989 zu keinem Wert, einschließlich NaN, gleich ist. |
| virtual FastCast(const Details::FastRttiBase&, void **) const | Nur für interne Zwecke. |
| GetCounter() | Ermittelt die Referenzzähler‑Datenstruktur, die dem Objekt zugeordnet ist. |
| virtual GetHashCode() const | Analog zur C#-Methode Object.GetHashCode(). Ermöglicht das Hashen benutzerdefinierter Objekte. |
| virtual GetType() const | Ermittelt den tatsächlichen Typ des Objekts. Analog zum C#-Aufruf System.Object.GetType(). |
| virtual Is(const TypeInfo&) const | Prüft, ob das Objekt eine Instanz des durch targetType beschriebenen Typs darstellt. Analog zum C#-Operator ‘is’. |
| Lock() | Implementiert das Sperren des C#-lock()-Statements. Direkt aufrufen oder das LockContext-Wächterobjekt verwenden. |
| virtual MemberwiseClone() const | Analog zur C#-Methode Object.MemberwiseClone(). Ermöglicht das Klonen benutzerdefinierter Typen. |
| Object() | Erstellt ein Objekt. Initialisiert alle internen Datenstrukturen. |
| Object(Object const&) | Kopierkonstruktor. Kopiert nichts, sondern initialisiert lediglich ein neues Objekt und ermöglicht das Kopierkonstrukt von Unterklassen. |
| operator=(Object const&) | Zuweisungsoperator. Kopiert nichts, sondern initialisiert lediglich ein neues Objekt und ermöglicht das Kopierkonstrukt von Unterklassen. |
| static ReferenceEquals(ptr const&, ptr const&) | Vergleicht Objekte nach Referenz. |
| static ReferenceEquals(T const&, T const&) | Vergleicht Objekte nach Referenz. |
| static ReferenceEquals(T const&, std::nullptr_t) | Vergleicht den Werttyp‑Objekt referenziell mit nullptr. |
| ReferenceEquals(String const&, std::nullptr_t) | Spezialisierung von Object::ReferenceEquals für den Fall von string und nullptr. |
| ReferenceEquals(String const&, String const&) | Spezialisierung von Object::ReferenceEquals für den Fall von strings. |
| RemovedSharedRefs(int) | Verringert die gemeinsame Referenzzählung um den angegebenen Wert. |
| virtual SetTemplateWeakPtr(uint32_t) | Setzt das n‑te Template-Argument auf einen schwachen Zeiger (statt eines geteilten). Ermöglicht das Umschalten von Zeigern in Containern in den Weak‑Modus. |
| SharedCount() const | Liefert den aktuellen Wert des gemeinsamen Referenzzählers. |
| SharedRefAdded() | Erhöht die gemeinsame Referenzzählung. Sollte nicht direkt aufgerufen werden; stattdessen sollten Smart‑Pointer oder ThisProtector verwendet werden. |
| SharedRefRemovedSafe() | Verringert und gibt die gemeinsame Referenzzählung zurück. Sollte nicht direkt aufgerufen werden; stattdessen sollten Smart‑Pointer oder ThisProtector verwendet werden. |
| virtual ToString() const | Analog zur C#‑Methode Object.ToString(). Ermöglicht die Umwandlung benutzerdefinierter Objekte in einen String. |
| static Type() | Implementiert das C#‑Konstrukt typeof(System.Object). |
| Unlock() | Implementiert das Entsperren der C#‑lock()-Anweisung. Direkt aufrufen oder das LockContext Wächterobjekt verwenden. |
| WeakRefAdded() | Erhöht die schwache Referenzzählung. Sollte nicht direkt aufgerufen werden; stattdessen sollten Smart‑Pointer oder ThisProtector verwendet werden. |
| WeakRefRemoved() | Verringert die schwache Referenzzählung. Sollte nicht direkt aufgerufen werden; stattdessen sollten Smart‑Pointer oder ThisProtector verwendet werden. |
| virtual ~Object() | Zerstört das Objekt. Gibt alle internen Datenstrukturen frei. |
Typedefs
| Typedef. | Beschreibung |
|---|---|
| ptr | Alias für den Smart‑Pointer‑Typ. |
Hinweise
Zusätzlich zu den in der C#‑Klasse System.Object verfügbaren Methoden ermöglicht es auch die Unterstützung einiger für die übersetzte Code‑Umgebung spezifischer Konzepte. Dazu gehören die Referenzzählung, die von Smart‑Pointer‑Klassen (System::SmartPtr, System::WeakPtr, System::DynamicWeakPtr) verwendet wird, sowie weitere Dienste im Zusammenhang mit Speicherverwaltung, Debugging usw.
Jedes Object verfügt über zwei Referenzzähler: einen gemeinsamen Referenzzähler und einen schwachen Referenzzähler. Der schwache Referenzzähler wird stets in einer separaten Datenstruktur gespeichert, nicht im Object selbst, wodurch schwache Zeiger das referenzierte Objekt überleben können. Der gemeinsame Referenzzähler wird entweder im Objekt selbst oder in derselben separaten Struktur gespeichert, abhängig vom Zustand des Makros ENABLE_EXTERNAL_REFCOUNT. Standardmäßig ist er in Debug‑Builds aktiviert und in Release‑Builds deaktiviert. Wenn der Smart‑Pointer‑Zähler im Objekt selbst gespeichert wird, wird die separate Datenstruktur nur erstellt, falls schwache Zeiger auf das Objekt existieren. Andernfalls wird sie zusammen mit dem Objekt erstellt.
Alle Smart‑Pointer verwenden diese beiden Referenzzähler und tragen zur selben, einzigen Eigentümergruppe bei.
Wenn eine Unterklasse von Object auf dem Stack erstellt wird, dürfen keine Smart‑Pointer darauf erzeugt werden, da sonst ein Problem beim Stack‑Löschen entsteht.
Dieser Typ kann entweder als Werttyp auf dem Stack oder im Heap mittels der Funktion System::MakeObject() alloziert werden. Sobald das Objekt alloziert ist, dürfen diese beiden Anwendungsfälle niemals vermischt werden: Das Vorhandensein von SmartPtr-Zeigern auf stack‑alloziierte Objekte ist streng verboten.
Siehe auch
- Namespace System
- Library Aspose.Font for C++