AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übergeordneten Konstruktor aufrufen

Ein Thema von mirage228 · begonnen am 14. Feb 2005 · letzter Beitrag vom 14. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:19
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?

Edit: Schlechtschreibung
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:25
Moin,

das zauberwort heisst "Base"...
Delphi-Quellcode:
pblic class bla
{
  public bla(int i):base(i)
  {
    ...;
   }


}
vom prinzip her.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:26
Hi maximov,

Super, das klappt - Danke sehr

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:27
Zitat von mirage228:
P.S.: Wieso können Konstruktoren nicht virtuell sein?
Weil sie gar nicht virtuell sein müssen. Bei Konstruktoren kann das komplett der Compiler übernehmen.
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;
        }
    }
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:29
Hi Robert,

Danke für die Erklärung

Das ganze heisst aber doch, dass
  • ich den anderen Konstruktoren nicht später aufrufen kann, wenn z.B. noch vorher was initialisiert werden muss?
  • ich den geerbten Konstruktor aufrufen muss? (Kriege sonst die Fehlermeldung: [C# Fehler] PHPInspector.cs(73): Keine Überladung für die Methode 'TPHPEntity' erfordert '0' Argumente)

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:36
Einen virtuellen Konstruktor kann man in C# mit der Klasse Activator und der Methode CreateInstance emulieren.

Code:
Activator.CreateInstance(Type type,params object[] args);
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:37
  • wäre IMHO sowieso schlechtes Design
  • klar!
    Du musst bedenken, dass du alle Kontruktoren implementieren musst, die du auch weiterhin in deiner Hierarchie haben willst.
    Ist aber zum Beispiel in #Develop/VS03+ReSharper (aber erst mit dem ) ein peace of cake: [alt+einfg] -> Constructors -> auswählen -> Enter
    Er wird dir dann auch den Aufruf zum Basiskonstruktor durchschleifen. (Habe ich in meinem Beispiel so gemacht )

Nachtrag:
Zitat von LarsMiddendorf:
Einen virtuellen Konstruktor kann man in C# mit der Klasse Activator und der Methode CreateInstance emulieren.

Code:
Activator.CreateInstance(Type type,params object[] args);
Aber nur mit einer statischen Funktion, nicht mit einem richtigen Constructor. (Oder rede ich jetzt Blödsinn? . )
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:45
Zitat von Robert_G:
wäre IMHO sowieso schlechtes Design
Das Problem sieht derzeit bei mir so aus:
  • Klasse B ist Ableitung von A
  • Klasse A setzt im Konstruktor eine property die auf eine virtuelle (und damit evtl. überschriebene) Methode zurückgreift
  • Klasse B überschreibt diese virtuelle Methode und greift dabei auf Felder zu, die ja in B erst erstellt werden müssen, bevor der Konstruktor von A aufgerufen wird
Aber nun gut, wenn es nicht anderes geht, werde ich den Teil halt umschreiben müssen.

Zitat von Robert_G:
klar! Du musst bedenken, dass du alle Kontruktoren implementieren musst, die du auch weiterhin in deiner Hierarchie haben willst. Ist aber zum Beispiel in #Develop/VS03+ReSharper (aber erst mit dem ) ein peace of cake: [alt+einfg] -> Constructors -> auswählen -> Enter
Er wird dir dann auch den Aufruf zum Basiskonstruktor durchschleifen. (Habe ich in meinem Beispiel so gemacht )
Achso nun gut, das wusste ich nicht - jetzt weiss ich es

Zitat von Robert_G:
Nachtrag:
Zitat von LarsMiddendorf:
Einen virtuellen Konstruktor kann man in C# mit der Klasse Activator und der Methode CreateInstance emulieren.

Code:
Activator.CreateInstance(Type type,params object[] args);
Aber nur mit einer statischen Funktion, nicht mit einem richtigen Constructor. (Oder rede ich jetzt Blödsinn? . )
Hm, Danke sehr, werde mal schauen, wie sich das verwenden lässt...
mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:50
Zitat von mirage228:
Zitat von Robert_G:
wäre IMHO sowieso schlechtes Design
Das Problem sieht derzeit bei mir so aus:
  • Klasse B ist Ableitung von A
  • Klasse A setzt im Konstruktor eine property die auf eine virtuelle (und damit evtl. überschriebene) Methode zurückgreift
  • Klasse B überschreibt diese virtuelle Methode und greift dabei auf Felder zu, die ja in B erst erstellt werden müssen, bevor der Konstruktor von A aufgerufen wird
Aber nun gut, wenn es nicht anderes geht, werde ich den Teil halt umschreiben müssen.
Shit happens...

Zitat von mirage228:
Zitat von Robert_G:
Nachtrag:
Zitat von LarsMiddendorf:
Einen virtuellen Konstruktor kann man in C# mit der Klasse Activator und der Methode CreateInstance emulieren.

Code:
Activator.CreateInstance(Type type,params object[] args);
Aber nur mit einer statischen Funktion, nicht mit einem richtigen Constructor. (Oder rede ich jetzt Blödsinn? . )
Hm, Danke sehr, werde mal schauen, wie sich das verwenden lässt...
Bloß nicht!
Activator verwendet Reflection um die passende ConstructorInfo zu finden. Diese wird dann per Invoke aufgerufen -> viel zu langsam für die meisten Aufgaben!
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Übergeordneten Konstruktor aufrufen

  Alt 14. Feb 2005, 13:55
Zitat von Robert_G:
Shit happens...
Hm, joa, ich werds schon überleben

Zitat von Robert_G:
Bloß nicht!
Activator verwendet Reflection um die passende ConstructorInfo zu finden. Diese wird dann per Invoke aufgerufen -> viel zu langsam für die meisten Aufgaben!
Achos, gut, ok. Das soll die Übersetzung meines PHP Inspectors werden, daher wollte ich schon darauf achten, dass das ganze Parsen auch schön schnell abläuft. Da könnte ich "Bremsen" nicht so gut gebrauchen

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz