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

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

最佳答案

使用 protected 修饰符而不是公开/私有(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);
    }
}

关于c# - 如何确保某些方法和字段仅对子类可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7166874/

相关文章:

wpf - 如何隐藏网格边框

javascript - jQuery 鼠标悬停功能不起作用

wpf - 如何在 FlowDocument 中隐藏段落?

c# - 如何将 Controller 用于局部 View ?

c# - PropertyGrid 中的斜体文本

c# - 从 C# 自动打开 SSMS

c# - 在 C# 中,为什么我会收到 "can' t cast double to float 错误”?

C# foreach 在两个值之间循环

visible=false 的 ASP.NET 控件不能在 javascript 中使用?

objective-c - 需要在 Objective-C 中声明一个公共(public)实例变量