Autor Beitrag
BRN
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 20.09.07 13:49 
Hallo,

ich habe übertragen folgendes Problem:

Ich habe eine Basisklasse "Fahrzeug" und eine von der Klasse "Fahrzeug" abgeleitete Klasse "Auto". In der Klasse "Auto" gibt es eine Variable "Geschwindigkeit".

Gibt es einen Weg, die Variable "Geschwindigkeit" nicht über die Klasse "Auto", sondern über "Fahrzeug" aufzurufen (also nicht "Auto.Geschwindigkeit" sondern "Fahrzeug.Geschwindigkeit")?

Danke!

Gruß
BRN
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Do 20.09.07 14:47 
base.Geschwindigkeit
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 20.09.07 16:13 
user profile iconBRN hat folgendes geschrieben:
Ich habe eine Basisklasse "Fahrzeug" und eine von der Klasse "Fahrzeug" abgeleitete Klasse "Auto". In der Klasse "Auto" gibt es eine Variable "Geschwindigkeit".

Gibt es einen Weg, die Variable "Geschwindigkeit" nicht über die Klasse "Auto", sondern über "Fahrzeug" aufzurufen (also nicht "Auto.Geschwindigkeit" sondern "Fahrzeug.Geschwindigkeit")?

Du musst die Variable in der Basisklasse definieren. Wenn das als protected oder public geschieht, ist sie auch in allen abgeleiteten Klassen bekannt.

Dringend zu empfehlen ist aber, zwischen internen Variablen und externen Eigenschaften zu unterscheiden:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public class Fahrzeug
{
    private double geschwindigkeit;
    public double Geschwindigkeit {
        get  {  return geschwindigkeit;  }
        set  {  geschwindigkeit = value; }
    }
}

Bei "protected double Geschwindigkeit" wäre diese Eigenschaft nur in abgeleiteten Klassen bekannt: Auto.Geschwindigkeit, bei "public double Geschwindigkeit" dagegen auch von außerhalb (z.B. im Formular).

Da Deine Frage etwas missverständlich formuliert ist, weise ich ausdrücklich darauf hin: Eine Basisklasse kann nichts (niemals!) davon wissen, was in einer abgeleiteten Klasse zusätzlich definiert wird.

Zusätzlicher Hinweis: Ich empfehle englische Bezeichner. Ich bin zwar ein Verfechter davon, möglichst deutsch zu sprechen und zu schreiben (und zwar korrekt); aber unter NET ergibt das schnell einen grausamen Mischmasch wie "GeschwindigkeitChanging".

Gruß Jürgen
BRN Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 20.09.07 20:51 
user profile iconJüTho hat folgendes geschrieben:

Eine Basisklasse kann nichts (niemals!) davon wissen, was in einer abgeleiteten Klasse zusätzlich definiert wird.


Hi Jürgen,

damit ist meine Frage beantwortet. Genau das hatte ich nämlich vor - ich wollte die Variable über die Basisklasse aufrufen.

Danke!

Gruß
BRN