I think it is a pretty ugly API design to provide a constructor that has arguments that are not exposed as properties. Here's an example of something I had to work with this week which I found to be very frustrating. Aspose has a PDF component which is actually pretty nice, but it is much easier to create an XML template for a PDF and then bind to the template to generate a PDF than it is to work with their API. Unfortunately, I have to generate a PDF on-the-fly using their API. Much like absolute positioning in HTML, it is possible to place objects in a PDF based on X, Y, Height, and Width values using the Aspose PDF library via the FloatingBox class. The FloatingBox constructor has height and width parameters, but no corresponding properties (and just in case you were wondering, neither does its base class). This is inconvenient other function parameters use the FloatingBox type and need to retrieve the height/width values. Inheriting from FloatingBox is one solution, but I think it would be a much cleaner design to expose the constructor args as properties even if they are read-only.