Well, you prevent most kinds of optimizations.
First, the JITter may not know which implementation is going to be called, (And he can't, since you may be using a Mock, right?)
So, all these property accessors, that would have been inlined will be real calls now. Thx to inlining, simple properties will not add real overhead at runtime. Virtual properties won't be inlined, so they do.
That was the performance side of things, the other problem is, that you can't trust properties to work as you think they are working.
Every property could be overridden. Even by yourself, because "this one time it really made sense, right?". So you'll find yourself checking the call tree more often than usual to check which implementations are applicable to the code you are working on.