2011-08-23 24 views
1

我不確定這是否可能,但我希望能夠讓父類的基類的字段/方法可見。如何確保某些方法和字段僅對兒童課程可見?

例如說我有一個類:

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); 
    } 
} 

然後我用類作爲另一個類的基:

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; 
    } 
} 

有沒有什麼辦法可以讓字段/方法ExampleFile僅對ExampleClass可見?

+1

雖然仍然允許'ExampleClass'被繼承,但不是。 –

+0

@John在我終於理解你的意思,好點之前,我讀了你的評論十幾遍。 – asawyer

回答

8

在要暴露給子類的字段/屬性/方法上,使用protected修飾符而不是public/private。

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:雖然被接受爲答案,但實際上並沒有回答這個問題。問題是如何將成員_only_暴露給第一個派生類。沒有辦法做到這一點,除非你讓這個類被「密封」,防止它被遺傳。 –

+1

@John我理解你的觀點約翰,你的權利,但我認爲你的閱讀深入到這個問題。 「我希望能夠讓父類的基類的字段/方法可見。」僅僅說明了第一個派生類。 – asawyer

+2

而不是將支持變量(私有)變爲受保護的,通常最好使用受保護的屬性訪問器。 – EtherDragon

1

你是什麼意思的基類?基類應該是你的情況下的父類!如果您希望某個類的成員可以通過它的某個後代進行訪問,請使用protected修飾符。如果您想讓子級別的成員可以訪問其父級,請通過獲取者來完成。