如何确保某些方法和字段仅对子类可见?

时间:2011-08-23 20:04:31

标签: c# visibility

我不确定这是否可行,但我希望能够让父类可以看到基类的字段/方法。

比方说,我有一个班级:

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可见?

2 个答案:

答案 0 :(得分:9)

在要向子类公开的字段/属性/方法上使用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);
    }
}

答案 1 :(得分:1)

基类是什么意思?在您的情况下,基类应该是父类!如果您希望某个类的成员可以访问其后代之一,请使用protected修饰符。如果您希望子类的成员可以访问其父类,请通过 getter 执行此操作。