C#: Как я называю статический метод базового класса от статического метода производного класса?

17
задан MindModel 2 March 2009 в 17:24
поделиться

5 ответов

static методы являются в основном методом к нейтрализации от объектно-ориентированных понятий. Как следствие они не очень гибки в иерархиях наследования, и не возможно сделать такую вещь непосредственно.

самая близкая вещь, о которой я могу думать, using директива.

using mybaseclass = Namespace.BaseClass;

class MyClass : mybaseclass {

  static void MyMethod() {  mybaseclass.BaseStaticMethod();  }

}
18
ответ дан 30 November 2019 в 12:20
поделиться

Это может быть сделано, но я не рекомендую это.

public class Parent1
{
    public static void Foo()
    {
        Console.WriteLine("Parent1");
    }
}

public class Child : Parent1
{
    public new static void Foo()
    {
        Type parent = typeof(Child).BaseType;
        MethodInfo[] methods = parent.GetMethods();
        MethodInfo foo = methods.First(m => m.Name == "Foo");
        foo.Invoke(null, null);
    }
}
4
ответ дан 30 November 2019 в 12:20
поделиться

Наличие во внимание, что Статический метод shoudn't реле в данных экземпляра... у Вас должен быть статический "MyMethod", который ведет себя отличающийся на основе параметра или чего-то как этот.

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

РЕДАКТИРОВАНИЕ: я думаю, что Ваш лучший выбор состоит в том, чтобы использовать продукт. MyMethod явно... Если Вы думаете это... это, should't вероятны, что Ваш Виджет изменяет свою основу clase..., и также в этом случае это - незначительное изменение в коде.

0
ответ дан 30 November 2019 в 12:20
поделиться

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

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

Некоторые предложения:

  • Отражение
  • Искажение базового класса (такой как пример Mehrdad )
1
ответ дан 30 November 2019 в 12:20
поделиться

Статические методы являются методами "Уровня Класса". Они предназначаются, чтобы быть методами, которые относятся ко всем экземплярам определенного класса. Таким образом наследование этого метода не имеет смысла, поскольку это изменило бы значение относиться к экземплярам класса. Например, если бы Вы были цикличным выполнением через набор продуктов (часть Виджета, некоторые не) и назвали MyMethod на каждом продукте тогда методом, который назвали, то был бы определен экземпляром класса. Это нарушает цель статических методов.

можно, вероятно, сделать что-то как Вы, хотят более чисто, просто не используя статические методы вообще, потому что в Вашем примере не кажется, что MyMethod обращается ко всем экземплярам продукта. Однако можно достигнуть того же влияния, которое Вы описываете при помощи интерфейсного класса как ‘IMyMethod’. Этот подход все еще не использует статический метод. Я предполагаю I’m, не видя потребность в статическом методе. Почему Вы хотите использовать статический метод для начала?

0
ответ дан 30 November 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: