2016-07-12 4 views
2

私はコンストラクタで部分クラスを持っていますが、 '同じシグネチャを持つメンバは既に宣言されています'(同じ名前のコンストラクタが他の部分クラスに存在するため)、コンストラクタはエラーをスローしています。名前がすでに使用されているときに、部分クラスのコンストラクタを作成するにはどうすればよいですか?.Net部分クラスのコンストラクタを作成する方法は?

public partial class DigitalArchivesAssetsDataContext 
{ 
    public DigitalArchivesAssetsDataContext() 
     : base(System.Configuration.ConfigurationManager.ConnectionStrings["digitalArchivesAssets"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 
} 
+2

コンストラクタシグネチャが同じ場合、なぜ2つの異なる部分クラスでそれを必要としますか?最終的に、部分クラスは同じクラスに記述されているかのようにコンパイルされます。 – keyboardP

+0

あなたのクラスには重複メンバーはありません。 Partialは、コンパイラが複数のファイルからクラスをコンパイルできるようにすることにほかならず、同じコーディング原則が適用されます。 – Igor

+0

既存のメソッドまたは追加しようとしているものをコードに表示する方法はありますか?何が既に存在するのであれば、そのコンストラクタが呼び出されたときに実行するカスタムコードを追加するために 'OnCreated'を利用することが目的です。この場合はおそらく、部分的なメソッド、イベント、またはオーバーライドできる仮想メソッドのいずれかです。 – Igor

答えて

4

できません。コンパイラは、プロジェクトの構築時に、基本的にすべての部分クラスのテキストを1つのクラスにマージします。クラスごとに同じ名前と署名を持つ複数のメソッド(コンストラクタを含む)を持つことはできません。

1つのオプションは、コンストラクタに別のシグネチャを使用するか、コンストラクタを必要としないようにアーキテクチャを変更することです。たとえば、既存のコンストラクタを使用して、別のコンストラクタのコードを実行するInitializeメソッドを使用できます。

「パーシャルメソッド」を使用することもできます。これらは、partialとマークされたメソッドで、既存のコンストラクタから「存在すれば」呼び出すことができます。コードジェネレータからの部分クラスの拡張ポイントとして設計されていますが、それらを使用することもできます。詳細については、MSDNを参照してください。

+0

ありがとう!私は一度しか存在させる必要がないので、重複したメソッドを削除する必要があることを認識しました。 –

3

コンパイル時に両方のパートがマージされて単一のクラスファイルが生成されるため、シグニチャが一致する複数のコンストラクタを分割された部分クラスに作成することはできません。たとえば

class ClassRoom 
{ 
private int boycount; //field 
public ClassRoom()  //default constructor 
{ 
    boycount = 30; 
} 
public ClassRoom(int bcount)  //overloaded constructor 
{ 
    boycount = bcount; 
} 
public double Avg()  //method 
{ 
    //statements goes here 
} 
} 

上記の例では、このようにクラスを分割できます。

//Calculation1.cs 
partial class ClassRoom 
{ 
private int boycount; //field 

public ClassRoom()  //default constructor 
{ 
    boycount = 30; 
} 
} 
//Calculation2.cs 
partial class ClassRoom 
{ 
public ClassRoom(int bcount)  //overloaded constructor 
{ 
    boycount = bcount; 
} 
public double Avg()  //method 
{ 
    //statements goes here 
} 
} 

希望です。

関連する問題