C# частичные классы

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

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

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

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 (приложение форм окон C#), однако когда я пытаюсь использовать этот класс в codebehind для формы, я получаю следующую ошибку:

класс MyClassLibrary. Книга

Предупреждение: тип 'MyClassLibrary. Книга' в 'C:... (Проект)' конфликтует с импортированным типом 'MyClassLibrary. Книга' в 'C:... (DLL Библиотеки классов)'. Используя тип, определенный в 'C:... (проект)'.

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

17
задан John Saunders 15 February 2010 в 02:39
поделиться

5 ответов

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

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

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

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

21
ответ дан 30 November 2019 в 12:19
поделиться

все неправильно. Вместо этого вам следует рассмотреть частичные методы. Посмотри на них. Это именно то, о чем вы просили.

0
ответ дан 30 November 2019 в 12:19
поделиться

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

1
ответ дан 30 November 2019 в 12:19
поделиться

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

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

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

0
ответ дан 30 November 2019 в 12:19
поделиться

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

Вот полное обсуждение этого вопроса: Следует ли использовать частичный класс в проектах?

10
ответ дан 30 November 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: