Каковы преимущества использования частичного класса по сравнению с абстрактным?
===============================================================================

Я читал Программирование Microsoft & # xAE; Visual C # & # xAE; 2008: Язык, чтобы лучше понять C # и что с ним можно сделать. Я сталкивался с частичными классами, с которыми я уже сталкивался в классе страниц ASP.Net.

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

Я просто упускаю суть в частичном классе. Также может кто-то обеспечить использование в реальном мире.

ичные классы - это просто способ разделения исходного кода, который определяет класс, на отдельные файлы (это делается, например, при создании новой формы в приложении Windows Forms - один файл - «ваш» код, другой файл - .designer). cs содержит код, которым управляет VS2008).



а также

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

-1- тип`FooBase` Скорее всего, придется знать идентичность конкретного типа, который должен был быть производным от него, и всегда использовать переменные этого типа, а не типа`FooBase`, Это представляет собой неудобно-тесную связь между двумя типами.

-2- если тип`Foo` является общедоступным, типа`FooBase` также должен быть публичным. Даже если все конструкторы`FooBase` являются`internal`было бы возможно для внешнего кода определить классы, которые получены из`FooBase` но нет`Foo`; Создание экземпляров таких классов было бы сложно, но не невозможно.

Если бы производный тип мог расширить видимость базового типа, эти проблемы не были бы чрезмерно проблематичными; можно было бы рассмотреть`FooBase` как «одноразовый» идентификатор, который будет отображаться ровно дважды: один раз в объявлении и один раз в строке объявления для`Foo`и думаю, что каждый`FooBase` будет`Foo` замаскированный Дело в том, что`FooBase` не мог использовать`Foo` члены инстанции на`this` без Typecast может быть утомительно, но также может способствовать хорошему разделению кода. Однако, поскольку невозможно расширить видимость базового типа, дизайн абстрактного класса кажется странным.



 чтобы разрешить двум исходным файлам example.aspx на основе разметки и example.aspx.cs на основе кода, чтобы методы и переменные, определенные в каждом из них, были видны каждому.
в примере .aspx

в примере .aspx.cs

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



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

Здесь можно подумать о классах Linq to SQL, сгенерированных для вас. Они генерируются автоматически, что означает, что вы не должны их изменять. Без частичного класса вы не можете присоединить интерфейс.
Вы можете создать новый класс и извлечь его из класса Linq to sql, но это действительно ничего вам не даст, потому что вы не можете вывести класс linq to sql в свой класс с помощью интерфейса.



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



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



ого класса (например, ORM).



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

Если у вас большой класс, это уже неправильно. Код должен быть преобразован в несколько «реальных» классы вместо нескольких файлов. Большие классы в целом означают, что класс делает слишком много вещей и нарушает SRP (принцип единой ответственности).