verrerbung unter c# [Edit]
-
public abstract class Base { public Base() { } public abstract bool DoSth(); } public class Extend : Base { public Extend() { } public bool DoSth() { } }
und trotzdem meckert er das Extend die abstrakte methode von base nich timplementiert ... was hab ich falsch gemacht ??
by the way ich taste mich grad an c# ran und hab paar java kenntnisse, kann sein das ich da was falsches reininterpretiert habe XD
-
Du hast das Keyword "override" in Extend vergessen. (Es heißt übrigens vererben und nicht ableiten
-
ja ... in c++ wars ja mit einem
class Extend : public Base
erledigt
aber wie genau muss das jetzt in c# aussehn ?
btw. override ?! heißt das wenn ich Extend nach Base caste und die Methode aufrufe, das dann die Methode von Extend ausgeführt wird ? also ganz klassisch als wenn cih eine virtual = NULL methode in c++ überschriebe ?
-
abstract in C# entspricht in C++ quasi einer pure virtual Methode.
C#:
public abstract void foo();
C++:
public:
virtual void foo() = 0;In C++ musst du eine Methode, die in Subklassen überschrieben werden soll als virtual deklarieren und wenn du dann in einer Subklasse die Methode neu definierst, wird sie automatisch überschrieben. In C# ist die "Beweislast" umgekehrt; alle Methoden sind quasi implizit virtual und in den Subklassen musst du explizit mittels "override" angeben, dass du die Methode überschreiben willst (und nicht nur verdecken).
Du musst also nur aus
public bool DoSth(){ }
das
public abstract bool DoSth() { }
machen.
-
this->that meinte wohl:
public override bool DoSth() { }
P.S. Ihr solltet eure Codes dann auch mit C#-Tags versehen, dann kommt ihr nicht so schnell durcheinander -)
-
Herzlichsten dank, meine Welt wurde wieder ein stück heller erleuchtet ... C# iss ja richtig geil ^^
jetzt fehlt nurnoch J# .... aber ich hab noch keine brauchbare anwendung dafür gefunden ^^
DICKES EDIT:
aber auf linux kann man mit c# nichmehr programmieren oder ?
nochn edit ... der c# button iss so klein und verschwindet fast in der 3ten zeile sry XD
-
Ceos schrieb:
jetzt fehlt nurnoch J# ....
Den Namen kannst schnell vergessen. Wird von niemanden verwendet und entspricht zu 99% der C# Syntax, da C# sich ja stark an Java anlehnt systaxmäßig und J# ja die Microsoft Java Variante für .Net ist und mittlerweile ja auch nicht mehr supported wird.
Ceos schrieb:
aber auf linux kann man mit c# nichmehr programmieren oder ?
Doch
Mono
Man unterliegt aber gewissen Einschränkungen, gerade was die GUI angeht.
-
this->that schrieb:
In C++ musst du eine Methode, die in Subklassen überschrieben werden soll als virtual deklarieren und wenn du dann in einer Subklasse die Methode neu definierst, wird sie automatisch überschrieben. In C# ist die "Beweislast" umgekehrt; alle Methoden sind quasi implizit virtual
Nein, das ist falsch. Diese Aussage gilt für Java, für C# jedoch NICHT! Dies ist eine wichtige Tatsache, da sie eine unterschiedlicher Philosophie unterstreicht. C# und VB definieren Methoden grundsätzlich nicht als virtuell sondern nur dann, wenn dies explizit erwünscht wird.
-
Ok. Aber die Umkehr der Beweislast stimmt dennoch^^