Как я могу гарантировать, что определенный метод и поля видны только дочернему классу? - PullRequest
1 голос
/ 24 августа 2011

Я не уверен, возможно ли это, но я хочу, чтобы поля / метод базового класса были видны родителю.

Скажем, например, у меня есть класс:

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 ]

9 голосов
/ 24 августа 2011

Используйте модификатор 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 голос
/ 24 августа 2011

Что вы подразумеваете под базовым классом? Базовый класс должен быть родителем в вашем случае! Если вы хотите, чтобы член класса был доступен одному из его потомков, используйте модификатор protected. Если вы хотите, чтобы член дочернего класса был доступен для его родителя, сделайте это через getter .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...