我目前有一个多个项目的解决方案,大多数使用相同的类。因此,在我看来,在解决方案中添加包含这些类的类库是一个好主意,而不是在每个项目中重复该类。
但是,我所拥有的一个项目需要一些特定于该项目的类的附加属性,并且不会在其他任何地方使用。结果,我认为我应该使用部分类来添加这些属性。所以我做了类似的事情:
在课程库中:
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,但是当我尝试在表单的代码隐藏中使用此类时,我收到以下错误:
类MyClassLibrary.Book
警告:类型 'MyClassLibrary.Book'在'C:...... (项目)'与进口的冲突 在'C:中键入'MyClassLibrary.Book':... (类库DLL)'。使用类型 在'C:...(项目)'中定义。
知道我做错了什么,或者我的整个方法是否糟糕,我应该做些什么呢?
答案 0 :(得分:21)
部分不适用于跨越程序集。如果您需要添加到类中以获得更具体的用法类型,则应创建派生类:
public class MyFoo
{
public string BasicProperty {get;set;}
}
public class MySpecificFoo : MyFoo
{
public string AnotherProperty {get;set;}
}
在需要更具体类型的MyFoo的项目中,请使用MySpecificFoo。由于它继承/派生自MyFoo,因此它将具有MyFoo的所有属性和功能,以及其他属性。这是Polymorphism的一部分,这是OOP的真正力量所在。
答案 1 :(得分:9)
简而言之,您不能在项目中使用部分类。所有的源必须同时编译,并且每个项目都完成。
以下是关于此问题的完整讨论:Should you use a partial class across projects?
答案 2 :(得分:1)
对于您要做的事情,您应该尝试使用基类和继承。甚至更好object composition。
答案 3 :(得分:0)
我认为这更像是你想要实现的目标。
将所有常用类放入类库项目中并将其编译为DLL。
然后,您可以在外部项目中引用该DLL。无论何时您需要为外部项目添加属性,您都可以继承该类并在那里添加属性。
答案 4 :(得分:0)