Как частичные элементы сравниваются с основными концепциями ООП и являются ли они первичными или резервными? - PullRequest
0 голосов
/ 19 сентября 2011

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

Некоторые вещи, которые помогают мне выбирать между эквивалентными механизмами:

  • Какой элемент ОО-программирования он использует?

  • Считается ли это первым выбором или отступлением?

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

Бонусом было бы, если бы кто-то мог дать мне некоторые исторические сведения - кто их придумал? были ли они специфической проблемой, которую они первоначально решили, сравнимой с тем, как методы расширения облегчали LINQ?

Ответы [ 5 ]

4 голосов
/ 19 сентября 2011

Частичные типы не являются наследованием, простым и понятным.

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

Конкретная проблема, которую они решили, заключалась в том, что между дизайнерским кодом и ручным кодом было разделение - избегая "не трогайте этот бит файла!" проблема, которая существовала в .NET 1.1 с кодом WinForms.

Обратите внимание, что WinForms в .NET 2+ и WPF имеют несколько разные модели - в WPF / Silverlight «дополнительный исходный файл» даже не присутствует, его нужно зарегистрировать - он генерируется из XAML как часть процесса сборки перед компиляцией самого типа. (Вы все еще можете найти сгенерированный код, обычно с именем SomeType.g.cs, в каталоге вывода obj.)

2 голосов
/ 19 сентября 2011

Правильно ли я отношусь к просмотру частичных классов, таких как наследование, и следует ли их использование ограничено определенными особыми случаями?

Частичные классы - это просто организационный метод.Они никоим образом не связаны с наследованием, так как после компиляции они «полностью исчезают».

Это просто способ разбить ваш код на несколько файлов.

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

1 голос
/ 19 сентября 2011

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

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

1 голос
/ 19 сентября 2011

Partials - это функция компилятора, никак не связанная с OO.

В C # они просто позволяют разделить класс на несколько отдельных файлов.

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

Я предлагаю прочесть о функции .

1 голос
/ 19 сентября 2011

Это не связано с ОО или какой-либо другой парадигмой.

И это запасной вариант, он был введен для поддержки инструментов и дизайнеров.
Например MyForm.Designer.cs, MyDataset.Designer.cs и т. Д.

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

...