Interface instantiation vs class instantiation

Interfaces can’t be instantiated by definition. You always instantiate a concrete class.

So in both statements your instance is actually of type UnityContainer.

The difference is for the first statement, as far as C# is concerned, your container is something that implements IUnityContainer, which might have an API different from UnityContainer.


Consider:

interface IAnimal 
{
    void die();
}

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

Now :

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

C# knows for sure anAnimal.die() works, because die() is defined in IAnimal. But it won’t let you do anAnimal.meow() even though it’s a Cat, whereas aCat can invoke both methods.

When you use the interface as your type you are, in a way, losing information.

However, if you had another class Dog that also implements IAnimal, your anAnimal could reference a Dog instance as well. That’s the power of an interface; you can give them any class that implements it.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)