Avatar billede clausjul Nybegynder
13. maj 2003 - 11:52 Der er 2 kommentarer og
2 løsninger

Kald af static method

Jeg har 3 klasser:

Klasse1
Klasse2
Klasse3

Og situationen afhænger af, hvilken klasse jeg skal bruge:

String result;
if (mode.Equals("Klasse1")) {
  result = Klasse1.Method();
}

if (mode.Equals("Klasse2")) {
  result = Klasse2.Method();
}

if (mode.Equals("Klasse3")) {
  result = Klasse3.Method();
}

Det virker godt nok - men kan man ikke skrive noget a la:

result = [mode].Method();

Det kan man naturligvis ikke, men er der en måde at gøre det på, så jeg slipper for at lave al de if'er?
Avatar billede chries Nybegynder
13. maj 2003 - 12:44 #1
med nedarving og override kan du

// project created on 26-09-2002 at 14:36
using System;

class Base
{
public virtual void F() { Console.WriteLine("Base.F"); }
}

class A : Base
{
public override void F() {
  Console.WriteLine("A.F");
}
}

class B : Base
{
public override void F() {
  Console.WriteLine("B.F");
}
}

class Test
{
static void Main()
{
  A a = new A();
  B b = new B();
   
  func( a );
  func( b );
}

static void func( Base b )
{
    b.F();
}
}
Avatar billede burningice Nybegynder
13. maj 2003 - 14:54 #2
hvad med noget type-halløj...

Type t = typeof(mode);
MethodInfo m = t.GetMethod("Method");
m.Invoke(null, null);
Avatar billede clausjul Nybegynder
21. maj 2003 - 08:21 #3
Cyberfessor -> Det jeg vil have er, at klassens navn er en string, altså f.eks. ["Klasse1"].Method(); Så kan den vælge klassen fra QueryString, f.eks. default.aspx?Modul=Klasse1 giver [Request.QueryString["Modul"].Method(); - Men syntaksen er naturligvis forkert - kan man det?
Avatar billede nielslbeck Nybegynder
21. maj 2003 - 09:58 #4
Yeps, det kan man...

Type t = Type.GetType("ditNamespace.Klasse" + Request.QueryString["Klasse"]);
MethodInfo mi = t.GetMethod("Metode");
Metode.Text = mi.Invoke(null, null).ToString();

Ovenstående skulle være rimelig selvforklarende, i hvert fald når nedenstående kommer med... Og Request.QueryString["Klasse"] skal her være "A", "B" eller "C".

public class KlasseA {
    public static string Metode() {
        return "Metode() fra KlasseA";
    }
}

public class KlasseB {
    public static string Metode() {
        return "Metode() fra KlasseB";
    }
}

public class KlasseC {
    public static string Metode() {
        return "Metode() fra KlasseC";
    }
}

Er du med?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester