solid principles in c# with examples pdf