为接口定义数据类型 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
和一些大括号。
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
和一些大括号。