나는 두 개의 클래스가 있습니다단일 상속을 강제하는 방법은 무엇입니까?
public class A
{
}
public sealed class B : A
{
}
을 그리고 (A
같은 어셈블리에 정의) 단지 내 B
클래스는 A
을 상속 할 수있는 나는 원한다.
어떻게하면됩니까?
나는 두 개의 클래스가 있습니다단일 상속을 강제하는 방법은 무엇입니까?
public class A
{
}
public sealed class B : A
{
}
을 그리고 (A
같은 어셈블리에 정의) 단지 내 B
클래스는 A
을 상속 할 수있는 나는 원한다.
어떻게하면됩니까?
그리고 A 클래스의 동일한 어셈블리에 정의 된 B 클래스 만 A를 상속 할 수 있기를 바랍니다. 어떻게해야합니까?
다음 상속 단순히 필요가 없습니다 ..
public sealed class B
{
//includes all methods of A and B
}
난 당신이 기본 유형의 멤버의 가시성을 제한하기 위해 상속 대신 구성을 사용하는 것이 좋습니다.
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 ....;
}
}
다른 어셈블리는 클래스 A를 사용할 수 있습니다 (공용 액세스 한정자 참조). – Nick
@ 닉 그들은 사용할 수는 있지만 상속하지는 않습니다. 그리고 당신은 "사용하다"는 말을하지 않고 "상속 받았다"고 말했습니다. –
경우에, 당신은 정말 처음에 상속을해야합니까?
너무 커진 수업을 나눠야한다면, 단 한 번의 책임을 질 가능성이 없으므로 좋은 연습을 따르지 않을 것입니다.
public class B
{
private sealed class A : B
{
}
}
을 그리고 당신의 필요에 맞게 조정할 :
지금 당신이 실제로이 필요합니까 몇 가지 어색한 이유, 당신은 시도 할 수 있습니다.
코드를 복제 했습니까? 이것은 좋은 것이 아닙니다. Class A는 exsist가되어야합니다. – Nick
어떻게 중복 될까요? 하나의 클래스 만 상속 할 수 있으므로 기본 클래스와 상속자 사이의 1-1 매핑입니다. 중복은 불가능합니다. – jgauffin
A가 B의 일부가 될 수없는 이유를 설명하고 싶을 수도 있습니다. – jgauffin