Vererbung in C#



  • Hallo.
    Zu diesem speziellen Thema konnte ich in meinem OpenBook leider nichts finden.
    Folgender Code:

    public abstract class BaseWeapon : Microsoft.Xna.Framework.GameComponent
    {
         public BaseWeapon(Game game)
         : base(game)
        {}
    
        public abstract BaseWeapon Clone(Game game);
    }
    
    public class SimpleLaser : BaseWeapon
    {
         public SimpleLaser(Game game)
         : base(game) // --> Fehler CS0122
        {}
    
        public override BaseWeapon Clone(Game game) { return new SimpleLaser(game); }
    

    Fehler:
    Fehler 1 Der Zugriff auf "Weapons.BaseWeapon.BaseWeapon(Microsoft.Xna.Framework.Game)" ist aufgrund der Sicherheitsebene nicht möglich.

    Wie delegiere ich die Variable Game aus SimpleLaser zu BaseWeapon und dessen basis?

    edit:
    nvm ich bin dumm. public vor dem constructor von BaseWeapon vergessen 😛


  • Administrator

    Sicherheitsebene? lol? Zum Glück habe ich ein englisches Visual Studio 😃
    Es lohnt sich übrigens fast immer, wenn man die Fehlercodes in der MSDN nachschaut:
    http://msdn.microsoft.com/en-us/library/ha94aebs.aspx

    Nicht nur hat man dann ganz sicher den englischen Begriff zur Verfügung, sondern es wird meistens noch ein Code gezeigt, welcher den Fehler erzeugt und wie man ihn behebt.

    Grüssli



  • Stimmt, Deutsche VS sind schon gruselig.

    Zu dem Problem: Abstrakte Klassen können kein ctor haben. (GameComponent ist auch nicht abstract)



  • David W schrieb:

    Abstrakte Klassen können kein ctor haben.

    Doch können sie, warum auch nicht?

    public abstract class TestClass
        {
            public TestClass()
            {
                Console.WriteLine("BaseCtor");
            }
        }
    
        public class ConcreteClass : TestClass
        {
            public ConcreteClass()
                :base()
            {
                Console.WriteLine("ConcreteCtor");
            }
        }
    


  • David W schrieb:

    Zu dem Problem: Abstrakte Klassen können kein ctor haben. (GameComponent ist auch nicht abstract)

    Uhm, VS lässt es aber zu ;-). Und ich wüsste jetzt auch nicht was dagegen spricht, der Constructor ist in meinem Fall auch nötig, da dort einige Daten noch initialisiert werden. Das ist ja nur minimalbeispiel hier. Aber wie gesagt, ein public vor dem CTOR von BaseWeapon hat gefehlt. Alles geht :).
    rya.



  • Scheinbar verwende ich abstrakte Klasse zu wenig, ich habe zumindest keine in Benutzung die ein eigenen ctor hat, dacht das wäre nicht möglich - so schnell kann man irren 😃

    @Scorcher24
    In deinem Code beim Startposting hast du ein public vor dem ctor...



  • David W schrieb:

    Scheinbar verwende ich abstrakte Klasse zu wenig, ich habe zumindest keine in Benutzung die ein eigenen ctor hat, dacht das wäre nicht möglich - so schnell kann man irren 😃

    @Scorcher24
    In deinem Code beim Startposting hast du ein public vor dem ctor...

    Das minimalbeispiel habe ich hier manuell reingetippert. Erst als ich danach nochmal über den Code im VC# gekuckt habe, ist mir das aufgefallen.


Anmelden zum Antworten