阅读约翰夏普VS 2010的书,它说泛型允许消除铸造的需要,减少值类型的装箱 - 减少?我认为它被删除以及铸造? 任何人都可以解释一下吗?泛型如何消除或减少对拳击的需求?
3
A
回答
5
它不是完全删除拳击和铸造的用途......它只是大大减少它们。有时候你做做的比编译器知道的东西更多的类型。例如,假设你已经将相同的事件处理程序连接到许多按钮。这并不是不合理的使用:
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;
...
}
在那里我们去 - 铸造没有死。
同样,在编译时您不知道确切类型并且无法一般表达它的情况下,仍会发生拳击。这两个最明显的例子是:
- 反射(获取与反射属性的值会给你一个
object
,拳击如有必要) 在C#动态类型4:
dynamic d = CreateDynamicObject(); int x = d.Foo(); // The dynamic call would have to box if necessary, // the conversion will unbox
所以拳击也没有死。
如果你只谈论收藏保存价值,那么它是真的,拳击和铸造现在出现在代码很多,很多的频率比以前多了。但并非所有产品都在集合中,泛型在集合之外也是有用的。
1
什么帮助了我,几年前,去认真处理仿制药是何时考虑使用一个通用:
您添加一个参数到包含类型信息
public object Parse(string input, Type outputType)
// replace by:
public T Parse<T>(string input)
您使用的方法包含类型的实例字段信息:
class Foo
{
private Type _wrappedObjectType;
private object _wrappedObject;
}
// replace by
class Foo<T>
{
private T _wrappedObject;
}
相关问题
- 1. C#泛型拳击错误
- 2. .NET泛型拳击编译错误
- 3. 对象类型和拳击
- 4. 减少泛型类声明
- 5. 减少对JavaScript库的需求
- 6. 原始类型转换,无需拳击
- 7. 如何减少对这些MySQL子查询的需求?
- 8. 斯威夫特泛型和枚举与拳击
- 9. 如何重拳出击DIV
- 10. 减少或消除持久连接mysql的
- 11. 角模块是否减少了对桶的需求?
- 12. 在斯卡拉,是否有减少泛型类型的简写?
- 13. 如何减少unordered_multiset的内存消耗?
- 14. 背景消除如何帮助减少CNN中的计算?
- 15. 如何在asp.net中增加或减少btn点击的大小?
- 16. 如何在asp.net中增加或减少btn点击的大小?
- 17. 泛型参数的构造器需求?
- 18. 这里泛型的需求是什么?
- 19. 拳击/取消装箱和可空?
- 20. 关于值类型的拳击
- 21. openMP - 需要原子或减少子句
- 22. 与参考类型对象类型拳击可变
- 23. 需要了解拳击在核心java
- 24. 是枚举枚举拳击或只需键入铸造
- 25. 减少Ajax请求
- 26. 如何减少对数据存储的请求数
- 27. 如何减少或去除Away3D中重叠的三角形
- 28. 泛型或对象铸造?
- 29. 如何减少css http请求?
- 30. Firebase存储:如何减少请求? (iOS)
谢谢乔恩,虽然我不是提前了解的第一个例子(事件)如何与泛型:/ – Miria 2011-04-13 06:43:59
@Mi ria:不是,这恰恰就是要点:泛型不会解决每个*您可能想要投射或放入盒子/盒子的地方。这就是为什么仿制药只能减少铸造/装箱/拆箱的数量而不是完全消除它的原因。 – 2011-04-13 06:44:49
哦,那么我可能会问错。我认为:使用泛型(只讲泛型代码)这个代码是不是免费的?为什么拳击只能减少? – Miria 2011-04-13 06:54:12