Как реализовать несколько интерфейсов с открытыми свойствами, но с закрытыми методами набора? - PullRequest
2 голосов
/ 04 апреля 2019

У меня есть два интерфейса:

public interface IFooFile
{
    string Name { get; }
}

public interface IFooProduct
{
    string Name { get; }
}

Я хочу реализовать оба с закрытыми наборами:

public class AFooThing : IFooFile, IFooProduct
{
    public string IFooFile.Name { get; private set; }
    public string IFooProduct.Name { get; private set; }
}

Но модификаторы доступа создают ошибку:

Метод доступа «AFooThing.IFooFile.Name.set» должен быть более ограничительным, чем свойство или индексатор «AFooThing.IFooFile.Name»

Если я реализую класс следующим образомЯ не получаю ошибок модификатора доступа, но у меня нет второго интерфейса:

public class AFooThing : IFooFile
{
    public string Name { get; private set; }
}

Я не могу понять, как реализовать оба интерфейса с добавленным «частным набором», не вызываяпроблемы.Как правильно справиться с этим?

1 Ответ

3 голосов
/ 04 апреля 2019

Вы не можете использовать модификаторы доступа для явного интерфейса, это public. Также вы не можете добавить свойство set, так как оно не существует в interface. Что вы можете сделать, так это достичь своей цели, используя вспомогательные поля, например,

public class AFooThing : IFooFile, IFooProduct
{
    private string _fooFileName;
    private string _fooProductName;

    string IFooFile.Name => _fooFileName;
    string IFooProduct.Name => _fooProductName;

    public AFooThing()
    {
        _fooFileName = "FooFileName";
        _fooProductName = "FooProductName";
    }
}
...