Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时不将接口用作返回类型?_C# - Fatal编程技术网

C# 何时不将接口用作返回类型?

C# 何时不将接口用作返回类型?,c#,C#,我读过,使用接口作为返回类型来减少耦合通常是个好主意。什么时候使用接口作为返回类型不是一个好主意?有两种情况下不应该使用接口作为返回类型: 调用方需要类的功能时,该功能也无法通过接口使用,以及 当您的类是对返回接口(例如,与WCF一起使用的类)提出额外要求的框架的一部分时 在所有情况下,当您可以使用接口作为返回类型时,最好使用接口。有两种一般情况下,您不应该将接口作为返回类型使用: 调用方需要类的功能时,该功能也无法通过接口使用,以及 当您的类是对返回接口(例如,与WCF一起使用的类)提出

我读过,使用接口作为返回类型来减少耦合通常是个好主意。什么时候使用接口作为返回类型不是一个好主意?有两种情况下不应该使用接口作为返回类型:

  • 调用方需要类的功能时,该功能也无法通过接口使用,以及
  • 当您的类是对返回接口(例如,与WCF一起使用的类)提出额外要求的框架的一部分时

在所有情况下,当您可以使用接口作为返回类型时,最好使用接口。

有两种一般情况下,您不应该将接口作为返回类型使用:

  • 调用方需要类的功能时,该功能也无法通过接口使用,以及
  • 当您的类是对返回接口(例如,与WCF一起使用的类)提出额外要求的框架的一部分时

在所有情况下,当您可以使用接口作为返回类型时,最好使用接口。

这一点非常模糊,不可能以一般方式回答。在这个细节层次上的设计决策是非常具体的用例和上下文。这是非常模糊的,不可能用一般的方式来回答。在这个细节层次上的设计决策是非常特定于用例和上下文的。对于这种普遍性很抱歉,但这正是我想要的答案类型。谢谢。另一个例子是,当您想要返回调用方知道必须是不可变的东西时,您需要为此返回一个不可变的具体类。接口可以由可变类实现,所以它不能提供这样的保证。@MatthewWatson确实如此。我在这种情况下使用的一种模式是创建一个不可变接口,然后从中派生出可变接口。这使我能够根据情况返回可变和不可变对象的接口。对不起,这种通用性,但这正是我想要的答案类型。谢谢。另一个例子是,当您想要返回调用方知道必须是不可变的东西时,您需要为此返回一个不可变的具体类。接口可以由可变类实现,所以它不能提供这样的保证。@MatthewWatson确实如此。我在这种情况下使用的一种模式是创建一个不可变接口,然后从中派生出可变接口。这使我能够根据情况返回可变和不可变对象的接口。