C# — каковы преимущества частичных классов?

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

Я новичок в C#, но провел 10 лет с C++, может быть, поэтому я потрясен?

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

EDIT: Извините, пропустил эту копию при поиске существующих сообщений.


person sharkin    schedule 18.09.2009    source источник
comment
откуда мне знать, что где-то нет четвертого? Проблема здесь не в частичных классах, а в незнании проекта, который вы компилируете.   -  person mackenir    schedule 18.09.2009
comment
stackoverflow.com/questions/612831 /   -  person Chris S    schedule 18.09.2009
comment
@mackenir: Попробуйте передать этот аргумент разработчику обслуживания, назначенному на проект из 100000+ строк кода.   -  person sharkin    schedule 18.09.2009
comment
Функция перехода к определению в Visual Studio предоставит вам список, скажем, четырех мест, где объявлен разделяемый тип.   -  person Eric Lippert    schedule 18.09.2009


Ответы (6)


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

person Matt Hamilton    schedule 18.09.2009
comment
+1 - на самом деле эта самая функция используется инструментом создания форм, который поставляется с Visual Studio. - person ConcernedOfTunbridgeWells; 18.09.2009

Большим преимуществом является скрытие сгенерированного компьютером кода (дизайнером).
Эрик Липперт опубликовал в блоге недавнюю запись о partial-keyword в целом.

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

person tanascius    schedule 18.09.2009

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

Таким образом, каждый файл кода содержит только тот код, который относится к реализации интерфейса. Это соответствует концепции разделения ответственности.

person Jehof    schedule 18.09.2009

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

Созданный дизайнером код в отдельном файле намного проще в работе по сравнению с версией 1.1, где ваш код часто мог быть искажен Visual Studio (в формах Windows).

Visual Studio по-прежнему делает беспорядок при синхронизации файла конструктора, исходного кода и файла дизайна с ASP.NET.

person Chris S    schedule 18.09.2009
comment
Два человека, редактирующие один и тот же класс, должны использовать контроль версий, а не частичные классы. - person svinto; 18.09.2009
comment
Или и то, и другое, и избавьте себя от головной боли при слиянии, если это какой-то огромный устаревший класс с тысячами строк. - person Chris S; 18.09.2009
comment
Я не утверждаю, что это правильный способ работы, но это была одна из идей частичных классов: msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx - person Chris S; 18.09.2009

Если у вас есть какой-то абсурдно большой класс, который по какой-то причине не может или не может логически разбиться на более мелкие классы, вы можете хотя бы физически разбить их на несколько файлов, чтобы работать с ним более эффективно. По сути, вы можете просматривать небольшие фрагменты за раз, избегая прокрутки вверх и вниз.

Это может относиться к устаревшему коду, который, возможно, из-за какой-то загадочной политики не может связываться с существующим API из-за многочисленных и укоренившихся зависимостей.

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

person Ray    schedule 18.09.2009

может быть, уже слишком поздно, но, пожалуйста, позвольте мне также добавить свои 2 цента:

*.При работе над большими проектами распределение класса по отдельным файлам позволяет нескольким программистам работать над ним одновременно.

*. Вы можете легко написать свой код (для расширенной функциональности) для класса, сгенерированного VS.NET. Это позволит вам написать код, который вам нужен, не вмешиваясь в код, сгенерированный системой.

person siamak    schedule 15.07.2011