I don't think this violates open/close principle. I think about it in terms of if I have to 'change' existing code to add functionality to an object then I'm violating open/close, but extending an object is exactly what you should do to add functionality.
You can extend the object in different ways in different languages, inheritance is just one way; c# provides you the ability to add extension methods to an existing class.
Remember 'open for extension - close for modification'