Decompilation of MarkupExtension class looks like this:
[TypeForwardedFrom("WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")] public abstract class MarkupExtension { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] protected MarkupExtension() { } public abstract object ProvideValue(IServiceProvider serviceProvider); } As you can see, it could have been implemented as an interface, but instead it's a class. Why did the WPF team designed it this way? Moreover, in Silverlight it is an interface.