Inheriting and extending .NET types