为了账号安全,请及时绑定邮箱和手机立即绑定

为接口定义数据类型类

为接口定义数据类型类

C#
潇潇雨雨 2021-10-23 17:00:52
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);    }}你使用什么方法,什么是正确的?
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

我看不出这里有很大的不同。在 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# 和一些大括号。


查看完整回答
反对 回复 2021-10-23
  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信