Подтвердить что ты не робот

Частичные классы С#

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

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

В библиотеке классов:

namespace MyClassLibrary
{
    public partial class Book
    {
        public string Title { get; set; }
        public string AuthorLast { get; set; }
        public string AuthorFirst { get; set; }
        public string Publisher { get; set; }
        public string Edition { get; set; }
        public string ISBN10 { get; set; }
        public string ISBN13 { get; set; }
    }
}

В проекте (MyProject):

namespace MyClassLibrary
{
    public partial class Book
    {
        public string AdditionalProperty { get; set; }
    }
}

Я ссылался на MyClassLibrary в MyProject (приложение формы Windows С#), однако, когда я пытаюсь использовать этот класс в codebehind для формы, я получаю следующую ошибку:

класс MyClassLibrary.Book

Внимание: тип "MyClassLibrary.Book" в "C:... (Project)" конфликты с импортированными типа 'MyClassLibrary.Book' в 'C:... (DLL библиотеки классов). Использование типа определенный в 'C:... (project)'.

Любая идея, что я делаю неправильно, или если весь мой подход плох, и я должен делать что-то еще?

4b9b3361

Ответ 1

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

public class MyFoo
{
    public string BasicProperty {get;set;}
}

public class MySpecificFoo : MyFoo
{
    public string AnotherProperty {get;set;}
}

В вашем проекте, требующем более конкретного типа MyFoo, вместо этого используйте MySpecificFoo. Поскольку он наследует/выводит из MyFoo, он будет иметь все свойства и функциональные возможности MyFoo, а также дополнительные свойства. Это часть Полиморфизм, в котором находится реальная сила ООП.

Ответ 2

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

Здесь приводится полное обсуждение SO об этом: Следует ли использовать частичный класс для проектов?

Ответ 3

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

Ответ 4

Я думаю, что это больше похоже на то, что вы пытаетесь достичь.

Поместите все ваши общие классы в проект библиотеки классов и скомпилируйте его в DLL.

Затем вы можете ссылаться на эту DLL во внешних проектах. В любое время, когда вам нужно добавить к нему свойство для внешнего проекта, вы можете наследовать класс и добавить туда свойство.

Ответ 5

все неправильно. Вместо этого вам следует рассмотреть частичные методы. Взгляните. Они именно то, что вы просили.