17

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

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

在类库中:

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

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

知道我做错了什么,或者我的整个方法很糟糕,我应该做点别的吗?

4

5 回答 5

21

零件不适用于跨越装配体。如果您需要添加到您的类以获得更具体的使用类型,您应该创建一个派生类:

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

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

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

于 2010-02-15T02:17:14.233 回答
10

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

以下是关于 SO 的完整讨论:您是否应该在项目中使用部分类?

于 2010-02-15T02:16:23.760 回答
1

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

于 2010-02-15T02:19:03.480 回答
0

我认为这更符合您想要实现的目标。

将所有常用类放入类库项目中,并将其编译为 DLL。

然后,您可以在外部项目中引用该 DLL。每当您需要为外部项目添加属性时,您都可以继承该类并在那里添加属性。

于 2010-02-15T02:21:44.007 回答
0

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

于 2010-02-15T02:38:55.577 回答