为接口定义数据类型 class

Define data type class for interface

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

目前我正在使用以下架构

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

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

我看不出这里有很大的不同。在 JAVA 中,您必须提供接口的名称来限定 class,而在 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();

在两种语言中,您都必须限定 class 的完整名称。在 C# 中,您通过其命名空间执行此操作,在 JAVA 中通过其接口(但作为命名空间)执行此操作。

所以实际上并没有太大的区别,无论如何您都必须提供 namespace/interface。我能看到的唯一区别是您需要在 C# 中键入 namespace 和一些大括号。