Difference between interface as type constraint and interface as parameter?

前端 未结 5 1349
暖寄归人
暖寄归人 2021-02-13 14:30

If I wanted to create a method that takes an instance of IList as a parameter (or any other interface, but let\'s use IList as an example), I could cre

5条回答
  •  孤街浪徒
    2021-02-13 15:05

    A couple of differences:

    • If you ever need the real type again (e.g. to pass to another generic method or for logging) then the generic method will be better
    • T could be a value type and still end up being unboxed in the generic form. It's pretty unlikely that this would be the case for IList, but for other interfaces it's highly plausible
    • The generic form allows you to specify a concrete implementation type which is different from the actual object type. For example, you might pass in a null reference but still want to know which implementation type T is
    • They will be JITted differently; see Joe Duffy's recent blog post on generics for more information

    It really depends on what you're doing of course... unless you actually need to know anything about T within the method, the only benefit to the generic form is the boxing point.

提交回复
热议问题