Neither of the options you have presented are good OO. If you are writing if statements around the type of an object, you are most likely doing OO wrong (there are exceptions, this isn't one.) Here's the simple OO answer to your question (may not be valid C#): <!-- language: c# --> interface IAccount { bool CanResetPassword(); void ResetPassword(); // Other Account operations as needed } public class Resetable : IAccount { public bool CanResetPassword() {return true;} public void ResetPassword() {/* RESET PASSWORD */} } public class NotResetable : IAccount { public bool CanResetPassword() {return false;} public void ResetPassword() {throw new YouCantResetPassword();} }