When a class implements an Interface, is it better to access the properties and methods through the class itself or through its Interface?
Interface, it will decouple the class so you can test it later. If you do not need to test it later, or there is no possibility of passing in a different class which inherits from the same interface then using the class methods is perfectly normal. Especially in the case of base classes like System.Collections.Generic.List. You wouldn't want to first cast it to IEnumerable every time you would like to do LINQ queries on it.
I think this all depends upon what you know about the object you're acting on. Assume
public class Bar : ICommon
public class Baz : ICommon
If I've got Baz myBaz, then there is no need to cast it to ICommon before acting on it.
Work at the highest level of abstraction that you can. It makes refactoring easier, and it significantly improves reuse of code.
Bar myBar = new Bar();
Baz myBaz = new Baz();
doSomething(myBar);
doSomething(myBaz);
public void doSomething(ICommon parameter)
{
parameter.DoICommonThing(); // working on object reference of type ICommon.
}
In other words, ASK for the most generic type (ie prototype parameters in method signature), allowing callers to GIVE whatever they have (actual passed parameters).