Sharing .NET generic code under the hood