![]() |
Übergeordneten Konstruktor aufrufen
Hallo,
ich habe in C# eine Klasse, die von einer anderer Klasse abgeleitet ist. Nun soll diese Klasse den geerbten Konstruktor aufrufen, wie es mit "inherited Create(...)" in Delphi geht. Wie kann ich das mit C# anstellen? mfG mirage228 P.S.: Wieso können Konstruktoren nicht virtuell sein? :gruebel: Edit: Schlechtschreibung :stupid: |
Re: Übergeordneten Konstruktor aufrufen
Moin,
das zauberwort heisst "Base"...
Delphi-Quellcode:
vom prinzip her.
pblic class bla
{ public bla(int i):base(i) { ...; } } |
Re: Übergeordneten Konstruktor aufrufen
Hi maximov,
Super, das klappt - Danke sehr :) mfG mirage228 |
Re: Übergeordneten Konstruktor aufrufen
Zitat:
du kannst mit this(XXX) einen Kontruktor deiner Klasse aufrufen. Mit base(XXX) einen des Vorgänergs. Sollte eigentlich alles erklären:
Code:
public class Base
{ string name; public string Name { get { return name; } } public Base(string name) { this.name = name; } } public class Descendant :Base { string description; public string Description { get { return description; } set { description = value; } } public Descendant(string name) : base(name) {} public Descendant(string name, string description) : this(name) { this.description = description; } } |
Re: Übergeordneten Konstruktor aufrufen
Hi Robert,
Danke für die Erklärung :) Das ganze heisst aber doch, dass
mfG mirage228 |
Re: Übergeordneten Konstruktor aufrufen
Einen virtuellen Konstruktor kann man in C# mit der Klasse Activator und der Methode CreateInstance emulieren.
Code:
Activator.CreateInstance(Type type,params object[] args);
|
Re: Übergeordneten Konstruktor aufrufen
Nachtrag: Zitat:
|
Re: Übergeordneten Konstruktor aufrufen
Zitat:
Zitat:
Zitat:
mfG mirage228 |
Re: Übergeordneten Konstruktor aufrufen
Zitat:
Zitat:
Activator verwendet Reflection um die passende ConstructorInfo zu finden. Diese wird dann per Invoke aufgerufen -> viel zu langsam für die meisten Aufgaben! |
Re: Übergeordneten Konstruktor aufrufen
Zitat:
Zitat:
mfG mirage228 |
Re: Übergeordneten Konstruktor aufrufen
Zitat:
|
Re: Übergeordneten Konstruktor aufrufen
Naja kommt auf den Anwendungszweck an. Wenn das ein mehr oder weniger einmaliger Aufruf ist, z.B. in einem Editor ein Objekt erstellen o.Ä. ist das akzeptabel. Tatsache ist aber auch, dass Methodenaufrufe über Reflection sehr langsam sind. Delphi .Net erstellt für jede Klasse noch eine zusätzliche Klasse mit den virtuellen Klassenmethoden und virtuellen Konstruktoren als virtuelle Methoden.
Die virtuellen Konstruktoren in Delphi sind eine schöne und vor allem typesichere Alternative gegenüber den normalen Factories. |
Re: Übergeordneten Konstruktor aufrufen
@maximov
Du kannst du ja ein wenig in Reflection.Emit belesen. Damit kannst du deine Typen nicht nur dynamisch erzeugen sondern auch dyn. Assemblies erzeugen, die die Instanzierung und ähnliches erledigen. Da diese in den RAM kompiliert werden gibt es keine Geschwindigskeitsverluste. (Ist aber alles andere als trivial ;) ) |
Re: Übergeordneten Konstruktor aufrufen
@Emit: Ist vielleicht nicht trivial, dafür aber interessant.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz