为接口定义数据类型类

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

    }

}

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


潇潇雨雨
浏览 162回答 1
1回答

忽然笑

我看不出这里有很大的不同。在 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 中则是通过其接口(但它充当命名空间)来执行此操作。所以实际上并没有太大的区别,无论如何你必须提供命名空间/接口。我能看到的唯一区别是您需要输入namespaceC# 和一些大括号。
打开App,查看更多内容
随时随地看视频慕课网APP