2011-06-15 3 views

답변

7

당신은 그것을 넣을 수 있고 별도의 어셈블리에서 클래스를 파생하고 기본 클래스의 생성자를 internal으로 선언하십시오. 그런 식으로 다른 어셈블리에서 상속받을 수 있지만 파생 클래스를 인스턴스화 할 수는 없습니다.

+0

어떻게 계승 할 수 있습니까? 인스턴스를 생성 할 수 없습니까? – Mehrdad

+3

@Mehrdad : 파생 클래스가 기본 생성자를 호출하기 때문에 해당 생성자에 액세스 할 수 있어야합니다. 'internal'에 대한 액세스 권한을 부여하면 같은 어셈블리 (또는 friend 어셈블리)의 파생 클래스 만이 기본 호출을 할 수 있습니다. 또한 파생 된 클래스는 '봉인 (sealed)'해야합니다. –

+0

@Travis : 그러나 파생 클래스가 인스턴스화되지 않도록 어떻게 적용 할 수 있습니까? – Mehrdad

-1

당신은 A 급 abstarct에서 만들 클래스의 숫자를 상속 할 수 있습니다 ..

+1

나는이 경우에 N = 3 –

+0

@Tom : Abatishchev가 준 답변을 참조하십시오. 나는 단지 같은 것을 말하고 싶었습니다. 힌트 후에 생각한 나머지 질문자가 Google ... – Stuti

4

아니,하지만 당신은 항상 한계를 초과하는 경우 생성자가 예외를 던질 수 있습니다.

+0

어떻게 알 수 있습니까? 얼마나 많은 클래스가 A로부터 상속됩니까? –

+0

기본 클래스 생성자의 해시 테이블에 'this'레코드 유형. – Koterpillar

3
// can be inherited only by classes in the same assembly 
public abstract class A 
{ 
    protected internal A() { } 
} 

// can't be inherited 
public sealed class B : A 
{ 
} 
1

그냥 내 개인 교화를 위해, 나는 "아, 아주 아주 나쁜 생각!했다 제목을 읽기에 처음 thougt 이후 같은 디자인 선택이 바람직하게 비즈니스 컨텍스트에 대한 자세한 내용을 알고 싶습니다 기본 클래스는 파생 클래스를 알기 위해 무엇이든 (그리고 더 나쁜 : 규칙을) 알아서는 안됩니다. "

관련 문제