我正试图向一位初级同事解释拳击。
规范示例似乎是ArrayList
。例如:
但是,当引入泛型时,这已被C#2中的List<T>
取代(如this answer中所述)。
那么,在仿制药的时代,在什么情况下我会发现自己的拳击价值?
编辑:要清楚,我不是在问是否仍然可以使用拳击。我问为什么我们会使用拳击,因为泛型使ArrayList
过时了。
编辑2:我认为这已经很明确了,但我也没有问过ArrayList
和List<T>
之间的区别。事实上,这个问题完全取决于我理解泛型意味着我们不必使用ArrayList
,因此我们不需要在这些情况下设置值。
答案 0 :(得分:3)
拳击和拆箱不是你明确做的事情;只要你手中有struct
并且你将它传递给期望object
的接收器,它就会一直发生。所以,请考虑以下代码:
public void SafeToString( Object a )
{
if( a != null )
return a.ToString();
return "null";
}
SafeToString( 42 );
如果您说过42.ToString()
则没有装箱,因为编译器知道42有ToString()
方法,struct
不能被子类化,所以{{1在编译时已知在42上运行的方法。
然而,当你说ToString()
时,42被装入一个对象,该对象被传递给SafeToString( 42 );
,后者调用SafeToString()
,后者解析为装箱对象的Object.ToString()
,代表ToString()
。
答案 1 :(得分:2)
泛型是一件好事,但他们无法完全消除处理拳击的必要性。
ArrayList
已经过时了,但是有时你仍然会在一个列表中存储不同的类型时使用List<object>
(当只有Object
是他们共同的东西时)。
另一个通用方法示例。同样,如果您在编译时知道类型,它们也很好,但是如果您想要使用任何类型的东西怎么办?好的旧object
参数和拳击(用铸造)来救援。