virtual / override (c#)



  • hi-ho,

    ich habe hier gerade probleme mit virtuellen funktionen.
    und zwar habe ich keine (basis-) klasse "cBaseModule", die von System.Web.UI.WebControls.WebControl abgeleitet ist.

    jetzt habe ich weitere klassen, die von cBaseModule abgeleitet sind.
    z.b.

    public class cNewsletter : plugin.cBaseModule
    {
      // [. code .]
      protected override void Render(System.Web.UI.HtmlTextWriter output)
      {
        output.Write("..:: Newsletter ::..");
      }
    
    }
    

    wenn ich jetzt im hauptprogramm ein Control erstelle:

    cBase oModule = new cNewsletter ();
    

    und die funktion RenderControl aufrufe, wird die Funktion der Basisklasse (cBaseModule) aufrerufen und nicht die cNewslette::Render, obwohl die funktion als virtual definiert ist.
    wenn ich den typ der instanz ausgeben lasse (oModule.getType().ToString())
    wird korrekt "cNewsletter" ausgegeben.

    woran liegt das?

    wir kann ich die funktion der eigentlichen kasse aufrufen??

    danke rene...



  • das problem liegt daran, dass ich die instanzen
    dynamisch mit dem "ystem.Reflection.Assembly" objekt erzeuge:

    System.Reflection.Assembly oAssembly;
    oAssembly = System.Reflection.Assembly.LoadFrom(sDllName);
    if(oType.IsSubclassOf(typeof(cBaseModule)))
    {
      oNewModule = Activator.CreateInstance(oType);
      break; 
    }
    

    habe getestet, die instanz "normal" zu erzeugen

    cBaseModule oNewModule = new cNewsletter();
    

    und das funkt.
    woran liegt es, dass die "späte binding" nicht funkt (bei der 1. version)???

    danke rene...


Anmelden zum Antworten