2012-10-26 4 views

답변

5

그리고 A 클래스의 동일한 어셈블리에 정의 된 B 클래스 만 A를 상속 할 수 있기를 바랍니다. 어떻게해야합니까?

다음 상속 단순히 필요가 없습니다 ..

public sealed class B 
{ 
    //includes all methods of A and B 
} 
+0

코드를 복제 했습니까? 이것은 좋은 것이 아닙니다. Class A는 exsist가되어야합니다. – Nick

+0

어떻게 중복 될까요? 하나의 클래스 만 상속 할 수 있으므로 기본 클래스와 상속자 사이의 1-1 매핑입니다. 중복은 불가능합니다. – jgauffin

+1

A가 B의 일부가 될 수없는 이유를 설명하고 싶을 수도 있습니다. – jgauffin

1

난 당신이 기본 유형의 멤버의 가시성을 제한하기 위해 상속 대신 구성을 사용하는 것이 좋습니다.

2

internal 생성자를 사용할 수 있으므로 다른 어셈블리에서 클래스를 사용할 수 없습니다.

public class A 
{ 
    internal A() { }  
} 
public sealed class B : A { } 

그리고, 성능에 대해 걱정하지 않는 경우 : 만 B가 상속 할 수

public class A 
{ 
    public A() 
    { 
     Type c = GetType(); 
     if (c != typeof(A) && c != typeof(B)) throw ....; 
    } 
} 
+0

다른 어셈블리는 클래스 A를 사용할 수 있습니다 (공용 액세스 한정자 참조). – Nick

+0

@ 닉 그들은 사용할 수는 있지만 상속하지는 않습니다. 그리고 당신은 "사용하다"는 말을하지 않고 "상속 받았다"고 말했습니다. –

0

경우에, 당신은 정말 처음에 상속을해야합니까?

너무 커진 수업을 나눠야한다면, 단 한 번의 책임을 질 가능성이 없으므로 좋은 연습을 따르지 않을 것입니다.

public class B 
{ 
    private sealed class A : B 
    { 

    } 
} 

을 그리고 당신의 필요에 맞게 조정할 :

지금 당신이 실제로이 필요합니까 몇 가지 어색한 이유, 당신은 시도 할 수 있습니다.

관련 문제