2012-10-12 2 views
-1

가능한 중복 :
Activator.CreateInstance with private sealed classC#에서 보호 생성자가 클래스의 인스턴스를 만드는 방법

내가 보호 생성자가 클래스에 액세스 방법을 시도하고있다. 누구나 클래스의 인스턴스를 생성하여 그 내부의 메소드에 액세스하는 방법을 알려줄 수 있습니까?

감사합니다, 보호 된 생성자와

Karteek Kuncham

+0

일부 코드를 게시하십시오.이 질문은 너무 애매합니다. –

답변

1

클래스는 일반적으로 인스턴스를 반환 그들에 정적 메소드의 형태가 클래스에 있습니다.

2

내가 설명하는 클래스의 하위 클래스를 만들 수 있다고 가정합니다. 필요한 모든 생성자 인수로 base()를 호출하는 자신의 클래스에서 생성자를 만드는 것이 필요합니다.

public MyDerivedClass : OtherBaseClass 
{ 
    MyDerivedClass() : base() 
    { } 
} 
+0

나는 파생 클래스를 사용하여 시도했지만 생성자는 내가 모르는 인수를 사용합니다. –

+0

이것은 무엇을 의미합니까? 아무도 제공하지 않거나 설명하지 않은 생성자에 전달할 인수가 무엇인지 말할 수 없게됩니다. –

0

클래스가 추상 클래스입니까? 그렇다면 , 그렇다면 옳은 일은 그 계급을 이어받는 것입니다.

+0

퍼블릭 클래스입니다. –

3

보호 된 생성자가있는 클래스는 외부 세계에 액세스 할 수 없지만 파생 클래스는 액세스 할 수 있습니다. 그 파생 된 클래스의 인스턴스를 만들고 싶다면 그 Base 클래스의 인스턴스를 만들고 싶다면 호출 할 때마다 클래스의 새 인스턴스를 반환 할 수있는 Base 반환 유형의 정적 메서드를 도입 할 수 있습니다 인스턴스 메소드. 싱글 톤 패턴과 유사 하나 단 하나의 인스턴스 생성에만 제한되지 않습니다.

첫 번째 방법 :

public Base 
{ 
    protected Base() { } 
} 

public Derived : Base 
{ 
    public Derived() : Base() { } 
} 

사용법 :

Dervied d = new Derived(); 

두 번째 방법 :

public Base 
{ 
    protected Base() { } 

    public static Base Instance() { return new Base(); } 
} 

사용법 :

Base b = Base.Instance(); 
+0

나는 파생 클래스를 사용하여 시도했지만 생성자는 내가 모르는 인수를 사용합니다. 그리고 그 클래스의 내용을 소프트웨어 응용 프로그램과 함께 제공되는 dll 파일로 변경할 수 없습니다. –

+0

하지만 할 수있는 것은 생성자가 Public Derived() : Base (string a) {}처럼 필요한 인수로 매개 변수화 된 생성자를 만드는 것입니다. 이 게시물에서 참조하십시오 : http://stackoverflow.com/questions/5142002/how-can-i-get-parameterized-constructor-data-of-base-class-in-child-class-if-chi –

관련 문제