阅读 John Sharp 的 VS 2010 一书,它说泛型允许消除强制转换的需要,减少值类型的装箱 - 减少?我认为它被移除以及类型转换? 谁能解释一下?
最佳答案
它并没有完全消除拳击和类型转换的使用……它只是大大减少了它们。有时您确实比编译器更了解事物的类型。例如,假设您已将同一个事件处理程序连接到许多按钮。用起来一点都不合理:
public void HandleClickEvent(object sender, EventArgs e)
{
// We know it will always be a button, and we want an exception if it's not
Button button = (Button) sender;
...
}
开始吧 - 转换还没有结束。
同样,装箱仍然会发生,在您在编译时不知道确切类型并且无法通用地表达它的情况下。两个最明显的例子是:
- 反射(通过反射获取属性的值将为您提供一个
对象
,必要时进行装箱) C# 4 中的动态类型:
dynamic d = CreateDynamicObject(); int x = d.Foo(); // The dynamic call would have to box if necessary, // the conversion will unbox
所以拳击也没有死。
如果您只是谈论在集合中存储值,那么装箱和强制转换现在在代码中出现的频率确实比以前少了很多很多。但并非所有内容都在集合中,泛型在集合之外也很有用。
关于c# - 泛型如何消除或减少装箱的需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645272/