定义接口的数据类型类

时间:2018-07-23 09:25:02

标签: c# oop architecture software-design

与Java不同,C#不允许在接口内部定义类。 定义仅在接口函数中使用的类的正确位置是什么?

当前我正在使用以下架构

namespace MyNameSpace
{
    public class MyReturnType 
    {
        // Contents
    }
    public class MyArgsType 
    {
        // Contents
    }
    public interface ICalibrationCheckController
    {
        MyReturnType PerformCalibrationCheck(MyArgsType arg);
    }
}

但是,此体系结构需要每个接口定义一个单独的命名空间。否则,如果我将在同一命名空间中定义另一个接口,则将很难区分第一个接口使用的类和另一个接口使用的类。

理想情况下,我想在接口定义中定义必要的类,但这是不允许的。

namespace MyNameSpace
{
    public interface ICalibrationCheckController
    {
        public class MyReturnType 
        {
            // Contents
        }
        public class MyArgsType 
        {
            // Contents
        }
        MyReturnType PerformCalibrationCheck(MyArgsType arg);
    }
}

您使用什么方法,什么是正确的?

1 个答案:

答案 0 :(得分:2)

我在这里看不出太大的区别。在JAVA中,您必须提供接口名称来限定类,从而在C#中使用名称空间。实际上, JAVA语法可以用作某种名称空间。因此,您真正要保存的唯一事情是键入namespace MyNamespace的键入负担。

话虽如此,您可以在JAVA中做到这一点

interface MyInterface
{
    MyClass DoSomething();
    class MyClass { }
}
interface AnotherInterface
{
    MyClass DoSomething();
    class MyClass { }
}

在C#中,类似的方法是这样-正如您已经提到的:

namespace MyNamespace
{
    interface MyInterface { MyClass DoSomething(); };
    class MyClass { }
}
namespace AnotherNamespace
{
    interface AnotherInterface { MyClass DoSomething(); };
    class MyClass { }
}

在JAVA中使用以下类型:

MyInterface.MyClass m = interfaceInstance.DoSomething();

在C#中,以下内容将有效:

MyNamespace.MyClass m = interfaceInstance.DoSomething();

在两种语言中,您都必须限定班级的全名。在C#中,您是通过其名称空间执行此操作的,在JAVA中是通过其接口(但是充当名称空间)执行此操作的。

因此,并没有太大的区别,无论如何,您都必须提供名称空间/接口。我几乎看不到的区别是您需要在C#和一些花括号中输入namespace