C# 기본 클래스는 컴파일 된 라이브러리 어셈블리 내에서만 액세스 할 수 있지만 공용 클래스를 상속하는 다른 하위 클래스는 공용으로 만들 수 있습니까? 예를 들어C# private (hidden) 기본 클래스
는 :
여기using System.IO;
class BaseOutput: Stream // Hidden base class
{
protected BaseOutput(Stream o)
{ ... }
...lots of common methods...
}
public class MyOutput: BaseOutput // Public subclass
{
public BaseOutput(Stream o):
base(o)
{ ... }
public override int Write(int b)
{ ... }
}
나는 BaseOutput
클래스 내 라이브러리의 클라이언트에 액세스 할 수 좋아하지만, 서브 클래스 MyOutput
이 완전히 공개 할 수 있도록 것입니다. 나는 C#이 기본 클래스가 하위 클래스보다 더 제한적인 액세스를 허용하지 않는다는 것을 알고 있지만 동일한 효과를 얻기위한 다른 합법적 인 방법이 있습니까?
UPDATE이 특정 라이브러리에 대한
내 솔루션은 기본 클래스 public
및 abstract
을하고, 그것을 문서화하는 "직접이 기본 클래스를 사용하지 마십시오"입니다. 또한 기본 클래스 internal
의 생성자를 만들어 외부 클라이언트가 클래스를 사용하거나 상속하는 것을 효과적으로 방지합니다.
(다른 O-O의 언어 나 기본 클래스를 숨긴 할 수 있기 때문에이 수치이다.) 불행하게도
'BaseOutput'의 생성자를 내부 코드로 만들어 외부 코드가 상속받을 수없는 이유는 무엇입니까? –
@mikez : 예, 그랬습니다. 위의 업데이트를 참조하십시오. –
내부 생성자가있는 공용 클래스가 더 좋은 옵션 일 수 있습니다 (내 대답은 샘플) –