接口作为返回类型
本文关键字:返回类型 接口 | 更新日期: 2023-09-27 18:03:57
接口可以是函数的返回类型吗?如果是,那么优势是什么?例如,在返回接口数组的情况下,以下代码是否正确?
public interface Interface
{
int Type { get; }
string Name { get; }
}
public override Interface[] ShowValue(int a)
{
.
.
}
可以返回一个接口。
假设类A
和B
各自实现接口Ic
:
public interface Ic
{
int Type { get; }
string Name { get; }
}
public class A : Ic
{
.
.
.
}
public class B : Ic
.
.
.
}
public Ic func(bool flag)
{
if (flag)
return new A();
return new B();
}
在这个例子中,func
类似于工厂方法—它可以返回不同的对象!
是的,interface
是一个非常有效的返回值。记住,返回的不是接口的定义,而是该接口的实现的实例。
的好处是非常明显的,考虑下面的代码:
public interface ICar
{
string Make { get; }
}
public class Malibu : ICar
{
public string Make { get { return "Chevrolet"; } }
}
public class Mustang : ICar
{
public string Make { get { return "Ford"; } }
}
现在您可以返回许多不同的ICar
实例,这些实例具有各自的值。
但是,使用接口的主要原因是它们可以在一个众所周知的契约中在程序集之间共享,这样当你传递给某人一个ICar
时,他们对它一无所知,但他们知道它有一个Make
。此外,除了公共接口之外,它们不能对它执行任何操作。所以如果Mustang
有一个public
成员名为Model
,他们无法访问它,除非它在接口中。
可以。
好处是可以抽象返回(和输入)类型。
public interface IFruit{ }
public class Apple: IFruit{}
public class Pear: IFruit{}
...
public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){
// this function can return Apple, Pear
}
这是可能的,对于公共函数来说这是一件好事。
对于why部分的问题,我不会复制粘贴其他人的答案,所以请参考已有的答案,例如:
- List
或IList 方法返回一个接口 - https://stackoverflow.com/a/3564291/870604
是的,我会从全局角度回答你的问题,我们可以使用接口作为返回类型,这意味着你可以返回任何数据类型,如int, float, string等。
interface = any datatype
package main
import (
"fmt"
)
func any (u interface{}) interface{} {
fmt.Printf("Type: %T'n",u)
return u
}
func main(){
fmt.Println("value: ",any(5))
fmt.Println(any("testing"))
}
输出