使用这两种方式有什么主要区别吗?
public TValue SomeFunctionA<TValue>(BaseClass<TValue> bc)
结束
public TValue SomeFunctionB<TValue, TBaseClass>(TBaseClass bc)
where TBaseClass : BaseClass<TValue>
我已经进行了一些测试,似乎找不到任何区别。所有派生类都按照应该的方式表现(覆盖某些内容,新建某些内容等)。
如果“TValue”已知,例如(除了您现在可以使用运算符):
public int SomeFunctionAInt(BaseClass<int> bc)
并且
public int SomeFunctionBInt<TBaseClass>(TBaseClass bc)
where TBaseClass : BaseClass<int>
PrintAndReturn1
会将栈上的值装箱到堆上,或者 - 如果传递的值已经在堆上,因为它是某种引用类型 - 则指向它。PrintAndReturn2
总是会对传递的结构体进行浅复制,并返回另一个参数的浅复制。 - Tory