有人可以帮助了解以下代码是否相同.如果不是类和interfance实例之间的区别.
IUnityContainer container = new UnityContainer()
UnityContainer container = new UnityContainer()
Run Code Online (Sandbox Code Playgroud)
据我所知,Inteface只有方法签名,如果接口已由3个类实现.不太确定上面的第一个语句会创建哪个3实例.
谢谢.
Nul*_*ion 51
根据定义,无法实例化接口.你总是实例化一个具体的类.
因此,在两个语句中,您的实例实际上都是类型UnityContainer.
不同之处在于第一个语句,就C#而言,您的container实现方式IUnityContainer可能与API不同UnityContainer.
考虑:
interface IAnimal
{
void die();
}
class Cat : IAnimal
{
void die() { ... }
void meow() { ... }
}
Run Code Online (Sandbox Code Playgroud)
现在:
IAnimal anAnimal = new Cat();
Cat aCat= new Cat();
Run Code Online (Sandbox Code Playgroud)
C#肯定知道anAnimal.die()有效,因为die()在中定义了IAnimal.但它不会让你做,anAnimal.meow()即使它是一个Cat,而aCat可以调用这两种方法.
当您使用界面作为类型时,您在某种程度上会丢失信息.
但是,如果您有另一个Dog也实现的类IAnimal,您anAnimal也可以引用一个Dog实例.这就是界面的力量; 你可以给他们任何实现它的类.
真的没有“接口实例化”这样的东西,但是有接口变量。第一行是一个此类变量的示例。
在第一行中,您可以实例化为container任何实现IUnityContainer. 对于第二行,container对象只能从UnityContainer类或派生类实例化。
当您在代码中使用接口变量时,它可以让您更轻松地切换出具体的实现,从而使您的代码更加灵活。