从dmm类的库中想要选择一个并向上传递一个通用名称

时间:2017-12-18 20:55:56

标签: c# class interface

我有几个名称空间代表不同的制造商DMM Racal_xxxxx Agilent_Xxxxx Fluke_xxxxx

据我所知,我可以编写一个界面,强制执行以上所有功能。

我可以在Test_Station中以我想要的方式做到这一点:

public Racal_4152A_DMM.main dmm = new Racal_4152A_DMM.main();

我可以在下一个Class,Test_Exec

中使用它

有没有将dmm向上传递而不公开?

而且,我是否真的需要让它不公开。

层次结构是:

Test_Exec(需要使用Racal_4152A_DMM作为dmm,但需要在Test_Station中这样分配)

Test_Station

Racal_4152A_DMM

所有都是单独的命名空间

1 个答案:

答案 0 :(得分:1)

命名空间实际上只是命名问题。他们不对访问权限施加限制。因此,如果要隐藏类,则必须将它们包装在另一个类中并将它们设为私有或将它们放在不同的项目中并将它们设置为内部。

我将向您展示如何将它们包装在课堂中。定义一个接口

public interface IMultimeter
{
    //TODO: declare members
}

public static class MulimeterFactory
{
    private class Racal_4152A : IMultimeter
    {
        //TODO: Implement interface
    }

    private class Agilent_XXX : IMultimeter
    {
        //TODO: Implement interface
    }

    public static IMultimeter Create_Racal_4152A()
    {
        return new Racal_4152A();
    }

    public static IMultimeter Create_Agilent_XXX()
    {
        return new Agilent_XXX();
    }
}

现在您可以创建像这样的DMM

IMultimeter dmm = MulimeterFactory.Create_Racal_4152A();

Racal_4152A之外的课程MulimeterFactory仍然不可见。