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^^


Anmelden zum Antworten