C#部分类

时间:2010-02-15 02:14:58

标签: 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; }
    }
}

在项目(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:...(项目)'中定义。

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

5 个答案:

答案 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)

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