2009-07-15 5 views
0

Disons que nous avons ces deux classes:C# réflexion et l'héritage des membres statiques

public class Base 
{ 
    public static int GetInt() { return 1; } 
} 

public class Derived : Base 
{ 

} 

Disons aussi qu'un morceau de appelle le code Derived.GetInt(). Comment puis-je dire à partir de GetInt() que c'était Derived.GetInt() et non Base.GetInt() qui a été appelé? Quelle technique de réflexion est-ce que j'utilise?

Répondre

0

Il n'y a aucun moyen de faire la différence, avec Reflection ou autre. Les appels sont exactement équivalents, et lors de la compilation, déjà au niveau MSIL, il n'y a pas de différence.

0

Je ne pense pas que vous le faites, car il est pas Derived.GetInt. GetInt est un membre statique, et bien que vous le référeniez via Derived, il appartient uniquement à Base.

0

Étant donné que la méthode GetInt est une méthode statique, et non une méthode d'instance, elle sera toujours appelée à partir de la classe de base. Vous ne pouvez pas vraiment l'appeler depuis la classe dérivée, car vous ne l'appelez pas depuis une instance.

0

Vous pouvez le faire si vous voulez avoir différentes fonctionnalités en fonction de la classe à laquelle la méthode est appelée.

void Main() 
{ 
    Console.WriteLine(Base.GetInt()); // 1 
    Console.WriteLine(Derived.GetInt()); // 2 
} 

public class Base 
{ 
public static int GetInt() 
{ 
    return 1; 
} 
} 

public class Derived : Base 
{ 
    public static int GetInt() 
    { 
    return 2; 
    } 
} 
0

Il est probablement préférable de considérer les méthodes statiques simplement comme des fonctions globales. Le nom de classe sert d'espace de noms étendu.

Questions connexes