2011-08-23 4 views
1

이것이 가능한지 확실하지 않지만 부모에게 표시 될 기본 클래스의 필드/메소드를 가질 수 있기를 원합니다. 내가 필드/메소드를 만들 수있는 방법이 있나요특정 방법 및 필드가 하위 클래스에서만 볼 수 있도록하려면 어떻게해야합니까?

public class ExampleClass : ExampleFile 
{ 
    public ExampleClass(Stream input) 
     : base(input) 
    { 
    } 

    public byte[] GetSomething() 
    { 
     byte[] id = new byte[5]; 
     SeekTo(2); 
     base._stream.Read(id, 0, 5); 
     return id; 
    } 
} 

:

말을 예를 들어 I 클래스가 있습니다

public class ExampleFile 
{ 
    private Stream _stream; 
    private long _baseoffset; 

    public ExampleFile(Stream input) 
    { 
     _stream = input; 
     _baseoffset = input.Position; 
    } 

    public void SeekTo(long offset) 
    { 
     _stream.Seek(offset + _baseoffset, SeekOrigin.Begin); 
    } 
} 

을 그리고 난 다음 다른 클래스에있는 클래스를 사용 ExampleFile의 내용은 ExampleClass에만 표시됩니까?

+1

'ExampleClass'가 상속되지 않는 동안. –

+0

@ 존 지난 12 시간에 대한 의견을 읽은 후에 마침내 당신이 의미하는 바를 잘 이해했습니다. – asawyer

답변

8

하위 클래스에 노출시키려는 fields/properties/메소드에서 public/private 대신 protected 수정자를 사용하십시오.

public class ExampleFile 
{ 
    protected Stream _stream; // no longer private, so the inherited 
    protected long _baseoffset; //classes can access them 

    public ExampleFile(Stream input) 
    { 
     _stream = input; 
     _baseoffset = input.Position; 
    } 

    public void SeekTo(long offset) 
    { 
     _stream.Seek(offset + _baseoffset, SeekOrigin.Begin); 
    } 
} 
+2

-1 : 답변으로 받아 들여졌지만 실제로는 질문에 대답하지 않습니다. 문제는 첫 번째 파생 클래스에 멤버를 _ 만원에 노출하는 방법이었습니다. 그 클래스를 상속받지 못하게 '봉인'하지 않으면 그렇게 할 수 없습니다. –

+1

@ 존 나는 존 요한과 당신의 권리를 이해합니다. 그러나 나는 당신의 독서를 그 질문에 깊이 생각합니다. '부모에게 보이는 기본 클래스의 필드/메소드를 가질 수 있기를 원합니다. '라는 말은 첫 번째 파생 클래스에 대해서만 말합니다. – asawyer

+2

백업 변수 (private)를 protected로 만드는 대신 일반적으로 보호 된 속성 접근자를 만드는 것이 가장 좋습니다. – EtherDragon

1

기본 클래스는 무엇을 의미합니까? 기본 클래스는 귀하의 경우에 부모로 간주됩니다! 자손 중 하나가 클래스의 구성원에게 액세스 할 수있게하려면 protected 수정자를 사용하십시오. 하위 클래스의 멤버가 상위 클래스에 액세스 할 수있게하려면 getter을 사용하십시오.

관련 문제