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; } } } 

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

class MyClassLibrary.Book

警告:“C:…(Project)”中的“MyClassLibrary.Book”类型与“C:…(类库DLL)”中的导入类型“MyClassLibrary.Book”冲突。 使用’C:…(project)’中定义的类型。

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

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

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

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

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

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

对于您要做的事情,您应该尝试使用基类和inheritance。 甚至更好的对象组成 。

我认为这更像是你想要实现的目标。

将所有公共类放入类库项目并将其编译为DLL。

然后,您可以在外部项目中引用该DLL。 无论何时需要为外部项目添加属性,您都可以inheritance该类并在其中添加属性。

都错了。 您应该考虑使用部分方法。 看起来吧。 他们正是你所要求的。