接口作为返回类型

saa*_*aam 21 c# interface

接口可以是函数的返回类型.如果是的话那就是优势.例如,以下代码更正在返回接口数组的位置.

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

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

}
Run Code Online (Sandbox Code Playgroud)

Mik*_*oud 19

是的,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"; } }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以返回许多ICar具有各自值的不同实例.

但是,使用接口的主要原因是它们可以在一个众所周知的合同中的程序集之间共享,这样当你传递给某人时ICar,他们对此一无所知,但他们知道它有一个Make.此外,除公共接口外,它们不能执行任何操作.因此,如果Mustang有一个public名为成员的成员Model,除非它在界面中,否则无法达到.

  • 这对我来说非常困惑,因为我们无法创建接口的实例,但我们可以返回接口的实例.你的意思是返回一个已实现接口的对象的实例? (3认同)

One*_*rew 17

是的,您可以返回一个界面.

让我们说类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();

}
Run Code Online (Sandbox Code Playgroud)

在这个例子func中就像工厂方法 - 它可以返回不同的对象!

  • 我可以将接口的返回解释为"返回已实现Ic的对象"吗?这对我来说非常混乱,因为我们无法创建接口实例,但我们可以返回一个. (3认同)
  • 这是因为接口是像 int 或类一样的“类型”描述,但接口可以有其类型的多个实现。因此,当您返回“接口”时,您实际上正在返回该接口的实现。如果你执行“IExample example = new ExampleImpl();” 然后“example .GetType() == typeof(ExampleImpl)”这将返回 true。但对于所述接口的其他实现则为 false。@Yu Zhang 这对你来说有意义吗? (3认同)

Ste*_*rov 8

是的,它可以.

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

public interface IFruit{ }

public class Apple: IFruit{}

public class Pear: IFruit{}

...

public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){
  // this function can return Apple, Pear
}
Run Code Online (Sandbox Code Playgroud)


ken*_*n2k 6

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

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