对象参数和泛型参数(类型参数)之间的区别

时间:2016-03-26 18:27:13

标签: c# generics

我在考虑对象参数和泛型参数之间的区别?

public foo<T>(T abc)

public foo(object abc)

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

Whatare te difeerences?

3 个答案:

答案 0 :(得分:0)

泛型是一个复杂的主题,如果你不理解差异,我建议你深入研究。

简而言之:通过使用对象,当您希望对象是A类型但事实上它是B类时,您会将自己暴露给运行时异常。泛型通过消除创建许多e的义务来提供类型安全性。 G。函数为许多不同类型做同样的事情。通过使用基本约束,您可以创建强大而安全的解决方案。

进一步阅读:

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

答案 1 :(得分:0)

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

泛型解决了这个问题。

答案 2 :(得分:0)

如果没有看到你的方法,很难说出差异。如果您的方法只是将输入类型写入控制台,则没有区别。但是,如果你的方法是投射对象并做某事,则存在差异。

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

所以一般差异:

类型安全:您可以发送任何内容,但在投射时,您可以在运行时使用对象获得错误。如果你使用约束,你将在编译时使用泛型获得错误。

清洁代码:您将始终使用对象强制转换。你不必用泛型来做这件事。

更好的表现(对于价值类型):没有装箱和装箱的通用装置。如果你发送值类型,它将首先放入这个内存堆(装箱)然后它将从内存堆(取消装箱)到对象的线程堆栈。