关于c#:interface作为返回类型

interface as return type

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

1
2
3
4
5
6
7
8
9
10
11
12
public interface Interface
{
    int Type { get; }
    string Name { get; }
}

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

}


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

好处很明显,请考虑以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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有一个名为Modelpublic成员,除非它在接口中,否则他们无法实现。


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

假设类AB分别实现接口Ic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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类似于工厂方法—它可以返回不同的对象!


是的,可以。

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

1
2
3
4
5
6
7
8
9
10
11
public interface IFruit{ }

public class Apple: IFruit{}

public class Pear: IFruit{}

...

public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){
  // this function can return Apple, Pear
}

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

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

  • list或ilist
  • 方法返回接口
  • https://stackoverflow.com/a/3564291/870604