繁体   English   中英

显式接口实现和多个接口

[英]Explicit Interface Implementation and Multiple Interfaces

在程序的某些位置,我需要访问对象的具体实现(测试),而在其他位置,我仅需要只读接口(ITest)。 这是为了防止用户假定所有属性都已设置和可修改

例如,如果用户调用TestFactory.Search,则返回的集合将阻止他们修改属性A和使用CollectionB(该函数未在函数内部设置)。 我希望能够使用对象初始化程序并保持属性名称相同。 我有以下解决方案:

public interface IReadOnly
{
    int Id{ get; }
    string Name{ get; }
}

public class ClassA : IReadOnly
{
    int Id{ get; internal set; }
    string Name{ get; set; }
}

public interface ITest
{
    int Id{ get; }
    IReadOnly A { get; }
}

public class Test : ITest
{
    private ClassA classA = new ClassA();

    int Id{ get; internal set; }
    IReadOnly ITest.A{ get{ return classA; } }
    public ClassA A
    { 
        get
        { 
            return classA;
        }  
        set
        {
             classA = value;
        }
    }

    public IEnumerable<string> CollectionB {get;set;}
}

public static class TestFactory
{
    IEnumerable<ITest> Search(){ /**/ }
    Test Read(){ /**/ };
}

有没有更好的方法来解决此问题,并且滥用显式接口实现的概念吗?

我将让您的Test类实现IReadOnly和ITest这两个接口。 如果要限制设置器访问,则强制转换为IReadOnly,否则,请使用ITest或具体的Test。

也许改为创建一个抽象类,然后将完全访问和只读行为子类化?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM