与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);
}
}
您使用什么方法,什么是正确的?
答案 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
。