2009-07-15 8 views
0

のは、我々はこれら2つのクラスを持っているとしましょう:C#のリフレクションと継承

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

public class Derived : Base 
{ 

} 

のも)(コードの一部がDerived.GetIntを呼び出すことを言ってみましょう。 GetInt()内で、呼び出されたBase.GetInt()ではなく、Derived.GetInt()であることをどのようにして知ることができますか?どんなリフレクションテクニックを使用しますか?

答えて

0

Reflectionなどとの違いを区別する方法はありません。コールは正確に同等です。コンパイル時にはすでにMSILレベルで違いはありません。

0

ですので、私はあなたとは思わないと思います。Derived.GetInt。 GetIntは静的メンバーで、Derivedを介して参照していますが、Baseにしか属しません。

0

メソッドGetIntは静的メソッドであり、インスタンスメソッドではないので、常にベースクラスから呼び出されます。インスタンスからインスタンスを呼び出さないため、派生クラスからそれを本当に呼び出すことはできません。

0

メソッドが呼び出されるクラスに基づいて異なる機能を使用する場合は、これを行うことができます。

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

静的メソッドをグローバル関数と見なすのが最も良い方法です。クラス名は、拡張名前空間として機能します。