如何使用公共属性但私有集方法实现多个接口?

问题描述 投票:2回答:1

我有两个接口:

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; }
}

我无法弄清楚如何使用添加的“私有集”实现两个接口而不会导致问题。处理这个问题的正确方法是什么?

c# interface access-modifiers
1个回答
3
投票

您不能将访问修饰符用于显式接口,它是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";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.