определение класса и реализация в C # против C ++ - PullRequest
2 голосов
/ 15 декабря 2010

С C ++ я могу иметь одно определение класса в заголовочном файле и иметь несколько файлов реализации, включая заголовочный файл.

Похоже, что в C # такой заголовочный файл отсутствует, поскольку один класс должен содержать оба определения / реализации.

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

Ответы [ 4 ]

5 голосов
/ 15 декабря 2010

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

public partial class ClassNameHere
{
}
3 голосов
/ 15 декабря 2010

Можно разделить определение класса или структуры или интерфейса на два или более исходных файла, используя модификатор ключевого слова Partial Ссылка на msdn с частичным классом

1 голос
/ 06 августа 2011

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

1) Владеет всем кодом, имеет доступ к нему и поддерживает его.

2) Желает использовать полезную базукласс (ы), которые могут составлять часть фреймворка или могут быть просто полезным классом с некоторыми виртуальными методами и т. д. и желают расширить или повторно реализовать интересующие методы виртуального базового класса.Теперь разработчику не нужно идти и смотреть на код в базовом классе (ах), чтобы понять вещи на функциональном уровне.Если вы понимаете работу функции, ее входных и выходных параметров, вам не нужно идти и копаться в исходном коде.Если вы считаете, что есть ошибка или необходима оптимизация, обратитесь к разработчику 1), который владеет и поддерживает базовый код.Конечно, ничего не говорится о том, что 1) и 2) нельзя связать с одним и тем же разработчиком, и в этом случае у нас нет проблем.На самом деле, это чаще, чем я подозреваю.Тем не менее, все еще является хорошей практикой хорошо разделять вещи в соответствии с уровнем, на котором вы работаете.

3) Разработчик должен использовать уже упакованный / запечатанный объект / компонент dll, который предоставляет соответствующие интерфейсы.

В контексте c #, 1) и 3) проблем нет.С 2) я полагаю, что нет никакого способа обойти это (если вы не перейдете от предоставления виртуальных базовых методов к раскрытию методов интерфейса, которые могут быть переопределены в компоненте, обладающем потенциальным базовым классом).Если я хочу взглянуть на определение класса, чтобы просмотреть методы, функции скаффолдинга и т. Д., Я должен также взглянуть на весь исходный код, который просто мешает тому, на чем я пытаюсь сосредоточиться.

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

Так что, может быть, умные Томы придумали c #, решили смешать определение класса с реализацией, чтобы поощрить разработчиков иметь внешние документы для своих определений классов и интерфейсов, которых в большинстве ИТ-компаний крайне не хватает *.1013 *

1 голос
/ 15 декабря 2010

Используйте частичный класс, как подсказывает @sparks, или разбейте его на несколько классов. Это хорошее эмпирическое правило, что если вы не можете разместить класс на нескольких страницах, это достаточно сложно, чтобы разбить его на части.

...