Say I have an Interface like this in a project called "Interface":
public interface TestInterface
{
    string Operation();
}
and class which implements it. This class is located in another project "Class":
public class TestClass : TestInterface
{
    public TestClass() { }
    public string Operation()
    {
        return "This is an Operation";
    }
}
My client does something like this (which is again in a different project "Client"):
class Program
{
    static void Main(string[] args)
    {
        TestInterface i = new TestClass();
        i.Operation();
    }
}
My question is related to this line:
TestInterface i = new TestClass();
By adding this line, I'm actually forced to add a references to both "Interface" as well as "Class" projects from my "Client" project. So why all this fuss? Can't I directly refer to the "Class" without keeping the "Interface" in between? Is there any way to access the methods via Interface only (without making a reference to the implementation Class)? Am I missing something here?