c# – 接口实例化与类实例化

有人可以帮助了解以下代码是否相同.如果不是类和interfance实例之间的区别.

IUnityContainer container = new UnityContainer()
UnityContainer container = new UnityContainer()

据我所知,Inteface只有方法签名,如果接口已经由3个类实现.不太确定上面的第一个语句将创建3个实例中的哪个.

谢谢.

最佳答案
根据定义,无法实例化接口.你总是实例化一个具体的类.

因此,在这两个语句中,您的实例实际上是UnityContainer类型.

不同之处在于第一个语句,就C#而言,您的容器是实现IUnityContainer的东西,它可能具有与UnityContainer不同的API.

考虑:

interface IAnimal 
{
    void die();
}

class Cat : IAnimal 
{
    void die() { ... }
    void meow() { ... }
}

现在:

IAnimal anAnimal = new Cat();
Cat aCat= new Cat();

C#肯定知道anAnimal.die()有效,因为die()是在IAnimal中定义的.但它不会让你做anAnimal.meow(),即使它是一个Cat,而aCat可以调用这两种方法.

当您使用界面作为类型时,您在某种程度上会丢失信息.

但是,如果你有另一个类也实现了IAnimal,你的anAnimal也可以引用一个Dog实例.这就是界面的力量;你可以给他们任何实现它的类.

转载注明原文:c# – 接口实例化与类实例化 - 代码日志