C # Эквивалент Delphi "класс" функция / процедура - PullRequest
0 голосов
/ 25 октября 2018

Я провел некоторый поиск, но, похоже, не могу найти точное соответствие по этому вопросу.Если я пропустил это, пожалуйста, перенаправьте меня.

В Delphi / Object Pascal у вас есть две концепции:

  1. Class Method - позволяет вам вызывать метод, не требуя экземпляров класса,Однако эти методы по-прежнему допускают переопределение в производном классе (таким образом, в некотором роде по-прежнему сохраняя некоторую информацию о классе).
  2. Статический метод - помечает метод как статический - таким образом, больше не допускается использование виртуальных / переопределенных ключевых слов - нет информации о классе / нетНаследование "знание"

* Вы можете исправить меня в вышеприведенном.

Вопрос: Что эквивалентно методу класса Delphi (не статическому) в C #?Я хотел бы иметь возможность объявить метод, который я могу вызывать, не имея экземпляра класса - , но Я хотел бы иметь возможность пометить базовый метод как виртуальный и переопределить его в производных классах.

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Невозможно сделать это в C # - мышление состоит в том, что статические методы всегда вызываются для определенного типа, никогда не бывает экземпляра.Что неверно, так как вы можете передать информацию о типе производного класса в функцию, которая принимает базовый тип класса ...

Если функция не должна делать что-то необычное (например, она просто возвращает статическое значение), вы можете избежать использования атрибута класса вместо виртуального статического метода.

0 голосов
/ 25 октября 2018

Delphi и C # имеют некоторые сходства.Они оба не поддерживают множественное наследование.

Возвращаясь к вашим вопросам, для методов, в которых вы собираетесь скрыть реализацию метода базового класса, вы можете использовать ключевое слово new.

Статика в Delphi работает так же, как C #.Вы не можете переопределить статический метод.Если вы хотите применить то же самое, C # также поставляется со статическим и закрытым (для класса) ключевым словом.

0 голосов
/ 25 октября 2018

Метод класса - позволяет вызывать метод, не требуя экземпляров класса .Однако эти методы все еще допускают переопределение в производном классе (таким образом, в некотором роде по-прежнему хранится некоторая информация о классе).

Вы уверены?

Независимо от того, ближайшийу нас есть класс со статическим методом.

public class MyLovelyHorse
{
    public static int HowManyLegs()
    {
        return 4;
    }
}

но я бы хотел пометить базовый метод как виртуальный и переопределить его в производном классе

Извините, не могу сделать.В C # нет возможности сделать это.

Это примерно то время, когда вам, вероятно, следует совершить экскурсию по Классам и структурам (Руководство по программированию в C #)

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