27

接口可以是函数的返回类型。如果是,那有什么好处。例如,以下代码在返回接口数组的位置是否正确。

public interface Interface
{
    int Type { get; }
    string Name { get; }
}

public override Interface[] ShowValue(int a)
{
.
.

}
4

5 回答 5

24

是的,您可以返回一个接口。

假设类AB每个实现接口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中就像工厂方法——它可以返回不同的对象!

于 2013-03-13T17:28:45.847 回答
22

是的 aninterface是一个非常有效的返回值。请记住,您返回的不是接口的定义,而是该接口的一个实例

好处很明显,考虑下面的代码:

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,除非它在界面中,否则他们无法访问。

于 2013-03-13T17:27:56.080 回答
9

是的,它可以。

好处是您可以抽象返回(和输入)类型。

public interface IFruit{ }

public class Apple: IFruit{}

public class Pear: IFruit{}

...

public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){
  // this function can return Apple, Pear
}
于 2013-03-13T17:27:18.313 回答
6

是的,这是可能的,这对公共职能来说是件好事。

对于您问题的为什么部分,我不会复制粘贴其他人的答案,因此请参考现有答案,例如:

于 2013-03-13T17:27:53.190 回答
0

是的,我将从 golang 的角度回答您的问题,我们可以使用接口作为返回类型,这意味着您可以返回任何数据类型,例如 int、float、string 等。

接口 = 任何数据类型

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"))
}

输出

于 2021-09-28T07:24:45.783 回答