C # отражение и наследование статических членов - PullRequest
0 голосов
/ 15 июля 2009

Допустим, у нас есть эти два класса:

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

public class Derived : Base
{

}

Скажем также, что фрагмент кода вызывает Derived.GetInt (). Как я могу сказать из GetInt (), что был вызван Derived.GetInt (), а не Base.GetInt ()? Какую технику отражения я использую?

Ответы [ 5 ]

0 голосов
/ 15 июля 2009

Вероятно, лучше всего рассматривать статические методы просто как глобальные функции. Имя класса служит расширенным пространством имен.

0 голосов
/ 15 июля 2009

Вы можете сделать это, если хотите использовать разные функции в зависимости от класса, через который вызывается метод.

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 голосов
/ 15 июля 2009

Я так не думаю, поскольку равно , а не Derived.GetInt. GetInt является статическим членом, и хотя вы ссылаетесь на него через Derived, он принадлежит только Base.

0 голосов
/ 15 июля 2009

Поскольку метод GetInt является статическим методом, а не методом экземпляра, он всегда будет вызываться из базового класса. Вы не можете действительно вызвать его из производного класса, потому что вы не вызываете его из экземпляра.

0 голосов
/ 15 июля 2009

Нет никакого способа узнать разницу, с отражением или иным образом. Вызовы точно эквивалентны, и при компиляции уже на уровне MSIL нет никакой разницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...