2016-07-12 3 views
2

나는 생성자를 가진 부분 클래스를 가지고 있지만 '같은 서명을 가진 멤버가 이미 선언되었으므로'생성자가 에러를 던지고있다. (같은 이름의 생성자가 다른 부분 클래스에 존재한다.) 이름이 이미 사용 중일 때 부분 클래스에 대한 생성자를 만드는 방법은 무엇입니까?.Net 부분 클래스의 생성자를 만드는 방법은 무엇입니까?

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

생성자 서명이 동일한 경우 왜 두 개의 다른 부분 클래스에서 필요합니까? 궁극적으로 부분 클래스는 동일한 클래스로 작성된 것처럼 컴파일됩니다. – keyboardP

+0

수업 중에 중복되는 회원이 없습니다. Partial은 컴파일러가 여러 파일에서 클래스를 컴파일하는 것을 허용하는 것일 뿐이지 만 중복 된 멤버가없는 경우 (생성자 포함)와 같은 코딩 원칙이 적용됩니다. – Igor

+0

코드에 기존 메서드 또는 추가하려고하는 메서드가 표시됩니까? 그것의 무엇이 이미 있다면, 그 목적은'OnCreated'를 사용하여 생성자가 호출 될 때 실행하고자하는 커스텀 코드를 추가하는 것입니다. 이 경우에는 아마도 부분 메소드, 이벤트 또는 대체 할 수있는 가상 메소드 중 하나 일 것입니다. – Igor

답변

4

수 없습니다. 컴파일러는 기본적으로 프로젝트가 빌드 될 때 모든 부분 클래스의 텍스트를 하나의 클래스로 병합합니다. 한 클래스 당 동일한 이름과 서명을 가진 하나 이상의 메소드 (생성자 포함)를 가질 수 없습니다.

하나의 옵션은 생성자에 대해 다른 서명을 사용하거나 생성자가 필요하지 않도록 아키텍처를 수정하는 것입니다. 예를 들어 기존 생성자를 사용하고 다른 생성자의 코드를 실행하는 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 
} 
} 

희망적입니다.