Я провел некоторые поиски, но, похоже, не могу найти точное соответствие по этому вопросу. Если я пропустил это, пожалуйста, перенаправьте меня.
В Delphi/Object Pascal у вас есть две концепции:
* Вы можете исправить меня на выше.
Вопрос: Что является эквивалентом метода класса Delphi (не статического) в С#? Я хотел бы иметь возможность объявить метод, который я могу вызывать, не имея экземпляра класса - но я бы хотел пометить базовый метод как виртуальный и переопределить его в производных классах.
Метод класса - позволяет вам вызывать метод, не требуя экземпляров класса. Однако эти методы все еще допускают переопределение в производном классе (таким образом, в некотором роде по-прежнему сохраняя некоторую информацию о классе).
Уверены ли вы?
Независимо от этого, у нас ближе всего класс со статическим методом.
public class MyLovelyHorse
{
public static int HowManyLegs()
{
return 4;
}
}
но я хотел бы иметь возможность пометить базовый метод как виртуальный и переопределить его в производном классе
Извините, не могу сделать. В С# нет возможности сделать это.
Это примерно то время, когда вы, вероятно, должны совершить экскурсию по классам и структурам (Руководство по программированию в С#)
В С# этого не может быть. Мысль заключается в том, что статические методы всегда вызываются для определенного типа, и никогда не бывает экземпляра. Что неверно, так как вы можете передать информацию о типе производного класса в функцию, которая принимает базовый тип класса...
Если функция не должна делать что-то необычное (например, она просто возвращает статическое значение), вы можете избежать использования атрибута класса вместо виртуального статического метода.
Delphi и С# имеют некоторые сходства. Они оба не поддерживают множественное наследование.
В ответ на ваши вопросы, для методов, в которых вы собираетесь скрыть реализацию метода базового класса, вы можете использовать ключевое слово new.
Статика в Delphi работает так же, как С#. Вы не можете переопределить статический метод. Если вы хотите применить то же самое, С# также поставляется со статическим и закрытым (для класса) ключевым словом.
new
- это то, что Delphi делает с reintroduce
.