Autor Beitrag
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.04.09 15:30 
Tach auch.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
abstract public class Foo
{
  /*
  public Foo()
  {
  }
  */


  public Foo(object pObject)
  {
    this._Object = pObject;
  }

  protected object _Object;
}


public class Bar : Foo
{
  public Bar(object pObject)
  {
    this._Object = pObject;
    this.DoImportantThings();
  }

  public void DoImportantThings()
  {
  }
}


Dieser Code sollte eigentlich funktionieren. Aber der Compiler besschwert sich, dass "Foo" keinen Konstruktor mit 0-Argumenten hat.

Mein fettes Handbuch meint ...

'fettes Handbuch' hat folgendes geschrieben:
... Konstruktoren werden grundsätzlich nicht von der Basisklasse an die Subklasse vererbt. Daher müssen alle notwendigen Konstruktoren in einer abgeleiteten Klasse definiert werden. ...

... Konstruktoren werden bekanntlich nicht vererbt und müssen deshalb - falls erforderlich - in jeder abgeleiteten Klasse neu definiert werden. Dennoch kommt den Konstruktoren einer Basisklasse eine entscheidende Bedeutung zu. Bei der Initialisierung des Objekts vom Typ einer abgeleiteten Klasse wird nämlich in jedem Fall zuerst ein Basisklassenkonstruktor aufgerufen. Es kommt zu einer Top-down-Verkettung der Konstruktoren, angefangen bei der obersten Basisklasse bis hinunter zu der Klasse, deren Konstruktor ausgeführt werden muss. ...


Heißt das jetzt, dass er dazu die parameterlosen Konstruktoren der Basisklasse benötigt, da ohne Vererbung auch kein passender Basis-Konstruktor gesucht und nur der optimale, also parameterlose, Konstruktor verwendet wird?


Moderiert von user profile iconChristian S.: Topic aus Basistechnologien verschoben am Do 02.04.2009 um 16:45
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 02.04.09 16:43 
Du kannst C# sagen, welchen Konstruktor der Basisklasse er verwenden soll:
ausblenden C#-Quelltext
1:
2:
 public Bar(object pObject)
            : base(pObject)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 03.04.09 07:46 
Danke. Funktioniert natürlich.