2011-08-23 52 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修饰符。如果您想让子级别的成员可以访问其父级,请通过获取者来完成。