требует наличия статических методов в C # - PullRequest
1 голос
/ 28 марта 2009

Учитывая группу объектов, которые имеют общий набор свойств и методов для поддержки данной доменной логики, есть ли способ обеспечить наличие определенных статических методов на этих объектах?

Я пришел к выводу, что реализация интерфейса не достигает этого (методы являются только экземплярами) и что статические методы не могут быть помечены как переопределенные, виртуальные или абстрактные.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 28 марта 2009

номер

(Примечание: в F # вы можете выразить такие ограничения, используя «встроенные» функции и типы «^» (например, все типы T, где T имеет статический метод ToInt (T), который возвращает «int»). Компилятор эффективно автоматически -расширяет каждый сайт вызовов на определенный тип.)

3 голосов
/ 28 марта 2009

Единственный способ заставить тип иметь статический член - наследовать от него. Все типы будут иметь статические члены, и если вам нужно переопределить их для производного типа, вы можете использовать ключевое слово «new»:

static void Main(string[] args)
{
    Console.WriteLine(Base.Hello());
    Console.WriteLine(Derived.Hello());
    Console.Read();
    /* output will be:
    Hello
    World
    */
}

public class Base
{
    public static object Hello()
    {
        return "Hello";
    }
}

public class Derived : Base
{
    public static new object Hello()
    {
        return "World";
    }
}

Это не совсем то же самое, что абстракция / переопределение, но с точки зрения потребителя работает аналогично.

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