C# 何时不将接口用作返回类型?
我读过,使用接口作为返回类型来减少耦合通常是个好主意。什么时候使用接口作为返回类型不是一个好主意?有两种情况下不应该使用接口作为返回类型:C# 何时不将接口用作返回类型?,c#,C#,我读过,使用接口作为返回类型来减少耦合通常是个好主意。什么时候使用接口作为返回类型不是一个好主意?有两种情况下不应该使用接口作为返回类型: 调用方需要类的功能时,该功能也无法通过接口使用,以及 当您的类是对返回接口(例如,与WCF一起使用的类)提出额外要求的框架的一部分时 在所有情况下,当您可以使用接口作为返回类型时,最好使用接口。有两种一般情况下,您不应该将接口作为返回类型使用: 调用方需要类的功能时,该功能也无法通过接口使用,以及 当您的类是对返回接口(例如,与WCF一起使用的类)提出
- 调用方需要类的功能时,该功能也无法通过接口使用,以及
- 当您的类是对返回接口(例如,与WCF一起使用的类)提出额外要求的框架的一部分时
在所有情况下,当您可以使用接口作为返回类型时,最好使用接口。有两种一般情况下,您不应该将接口作为返回类型使用:
- 调用方需要类的功能时,该功能也无法通过接口使用,以及
- 当您的类是对返回接口(例如,与WCF一起使用的类)提出额外要求的框架的一部分时
在所有情况下,当您可以使用接口作为返回类型时,最好使用接口。这一点非常模糊,不可能以一般方式回答。在这个细节层次上的设计决策是非常具体的用例和上下文。这是非常模糊的,不可能用一般的方式来回答。在这个细节层次上的设计决策是非常特定于用例和上下文的。对于这种普遍性很抱歉,但这正是我想要的答案类型。谢谢。另一个例子是,当您想要返回调用方知道必须是不可变的东西时,您需要为此返回一个不可变的具体类。接口可以由可变类实现,所以它不能提供这样的保证。@MatthewWatson确实如此。我在这种情况下使用的一种模式是创建一个不可变接口,然后从中派生出可变接口。这使我能够根据情况返回可变和不可变对象的接口。对不起,这种通用性,但这正是我想要的答案类型。谢谢。另一个例子是,当您想要返回调用方知道必须是不可变的东西时,您需要为此返回一个不可变的具体类。接口可以由可变类实现,所以它不能提供这样的保证。@MatthewWatson确实如此。我在这种情况下使用的一种模式是创建一个不可变接口,然后从中派生出可变接口。这使我能够根据情况返回可变和不可变对象的接口。