Объявление и реализация членов функции класса C # - PullRequest
5 голосов
/ 10 октября 2009

Есть ли в C # понятие определения и реализации класса, подобное тому, что вы найдете в C ++?

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

Однако в C # кажется, что я вынужден определять свои функции-члены в точке объявления. Можно ли этого избежать или как-то обойти?

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

Ответы [ 12 ]

0 голосов
/ 10 октября 2009

Для этого есть два способа сделать C ++ более понятным:

  • Создайте файл интерфейса, который объявляет все сигнатуры и свойства метода
  • Реализация этого интерфейса в классе для нескольких файлов с помощью модификатора partial в определениях классов

редактирует:

// File: ICppLikeInterface.cs
public interface ICppLikeInterface
{
    ...
}

// File: CppLikeImplementation1.cs    
public partial class CppLikeImplementation : ICppLikeInterface
{
    ...
}

// File: CppLikeImplementation2.cs    
public partial class CppLikeImplementation : ICppLikeInterface
{
    ...
}

Способ разделения интерфейса C ++ в заголовочный файл в основном (как мне кажется) объясняется тем, что при создании C было принято раннее решение, позволяющее выполнять быстрые пошаговые компиляции в «старые времена», поскольку компилятор выбрасывает любые метаданные В отличие от Smalltalk. Это не относится к C # (или Java), где десятки тысяч строк компилируются за считанные секунды на новейшем оборудовании (C ++ до сих пор не работает)

0 голосов
/ 10 октября 2009

Прототип, на который вы, вероятно, ссылаетесь, на самом деле не существует в C #. Определение интерфейсов, как предлагали другие, даст вам момент, когда у вас будут собраны объявления о ваших методах, но это не то же самое, что прототипы, и я не уверен, что это поможет вам сделать ваши классы реализации проще для чтения. 1001 *

C # не является C ++ и, вероятно, не должен рассматриваться как C ++.

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