繁体   English   中英

对象参数和通用参数(类型参数)之间的差异

[英]difference between object parameter and generic parameter(type parameter)

我在考虑对象参数和通用参数之间的区别吗?

public foo<T>(T abc)

public foo(object abc)

实际上两者都是变量,我可以将许多Object转换成我喜欢的任何东西,因为它是所有的基类

什么是差异?

泛型是一个复杂的话题,如果您不了解其中的区别,我建议您更深入地研究。

简而言之:通过使用对象,当您期望对象为A类型但实际上为B类型时,您将自己暴露于运行时异常。泛型通过消除创建许多函数(例如执行许多不同类型的事物都是相同的。 通过使用通用约束,您可以创建功能强大且安全的解决方案。

进一步阅读:

https://msdn.microsoft.com/library/d5x73970.aspx?f=255&MSPPError=-2147217396 https://msdn.microsoft.com/en-us/library/512aeb7t.aspx

性能-将值类型转换为对象时,装箱和拆箱非常昂贵。 类型安全-需要转换对象,您将失去编译时类型安全。

泛型解决了这个问题。

不看自己的方法就很难分辨差异。 如果您的方法只是将输入类型写入控制台,则没有区别。 但是,如果您的方法强制转换对象并执行某些操作,则存在差异。

由于约束,泛型非常强大,并且它们可以从其他泛型类型继承。

所以一般区别:

类型安全:您可以发送任何内容,但是在投射时,对象运行时会出错。 如果使用约束,则在泛型编译时会出错。

清洁代码:您将始终对对象使用强制转换。 您不必使用泛型。

更好的性能 (对于值类型):不会对泛型进行装箱和拆箱。 如果发送值类型,它将首先将该内存堆(装箱)放入,然后与对象一起从内存堆(拆箱)进入线程堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM