C#部分类

And*_*ler 17 c# class partial-classes

我目前有一个多个项目的解决方案,大多使用相同的类.因此,在我看来,在解决方案中添加包含这些类的类库是一个好主意,而不是在每个项目中重复该类.

但是,我所拥有的一个项目需要一些特定于该项目的类的附加属性,并且不会在其他任何地方使用.结果,我认为我应该使用部分类来添加这些属性.所以我做了类似这样的事情:

在类库中:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

在项目中(MyProject):

namespace MyClassLibrary
{
    public partial class Book
    {
        public string AdditionalProperty { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在MyProject(C#windows表单应用程序)中引用了MyClassLibrary,但是当我尝试在表单的代码隐藏中使用此类时,我收到以下错误:

class MyClassLibrary.Book

警告:类型 'MyClassLibrary.Book' 在 'C:...(项目)' 的冲突在 'C:...(类库DLL)' 进口型 'MyClassLibrary.Book'.使用'C:...(项目)'中定义的类型.

知道我做错了什么,或者我的整个方法是不好的,我应该做些什么呢?

Rex*_*x M 21

部分不适用于跨越装配.如果需要添加到类中以获得更具体的用法类型,则应创建派生类:

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

public class MySpecificFoo : MyFoo
{
    public string AnotherProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在需要更具体类型的MyFoo的项目中,请使用MySpecificFoo.由于它继承/派生自MyFoo,因此它将具有MyFoo的所有属性和功能,以及其他属性.这是多态性的一部分,这是OOP的真正力量所在.

  • 呃......不,这叫做"继承"! (2认同)

Nic*_*ver 10

简而言之,您不能跨项目使用部分类.所有源必须同时编译,并且每个项目都完成.

以下是关于此问题的完整讨论:您是否应该跨项目使用部分类?