17

私は現在、ほとんど同じクラスを使用する複数のプロジェクトのソリューションを持っています。その結果、各プロジェクトでクラスを繰り返すのではなく、これらのクラスを含むクラス ライブラリをソリューションに追加することをお勧めします。

ただし、私が持っている 1 つのプロジェクトでは、そのプロジェクトに固有であり、他の場所では使用されない一部のクラスにいくつかの追加プロパティが必要です。その結果、これらのプロパティを追加するには、部分クラスを使用する必要があると考えました。だから私はこのようなことをしました:

クラス ライブラリで:

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:...(プロジェクト)」で定義されたタイプを使用します。

私が間違っていること、または私のアプローチ全体が悪く、何か他のことをすべきかどうか、何か考えはありますか?

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

すべて間違っています。代わりに、部分的なメソッドを検討する必要があります。見上げる。それらはまさにあなたが求めていたものです。

于 2010-02-15T02:38:55.577 に答える
0

これは、あなたが達成しようとしていることに沿っていると思います。

すべての共通クラスをクラス ライブラリ プロジェクトに入れ、それを DLL にコンパイルします。

その後、その DLL を外部プロジェクトで参照できます。外部プロジェクト用にプロパティを追加する必要があるときはいつでも、クラスを継承してそこにプロパティを追加できます。

于 2010-02-15T02:21:44.007 に答える