 <p>If it is only <code>TotalVoteScore</code> that you don't want to have to re-implement, then this is the way to go:</p> <pre><code>public interface IVotable { int TotalUpvotes { get; } int TotalDownvotes { get; } int TotalVoteScore { get; } } public abstract class VotableBase : IVotable { public abstract int TotalUpvotes { get; protected set; } public abstract int TotalDownvotes { get; protected set; } public virtual int TotalVoteScore { get { return TotalUpvotes - TotalDownvotes + 1 ; } } } public class Comment : VotableBase { public override int TotalUpvotes { get; protected set; } public override int TotalDownvotes { get; protected set; } } </code></pre>