C# Encapsulation and Polymorphism