Does the C# 4.0 “dynamic” keyword make Generics redundant?

后端 未结 5 2092
故里飘歌
故里飘歌 2021-01-02 09:55

I\'m very excited about the dynamic features in C# (C#4 dynamic keyword - why not?), especially because in certain Library parts of my code I use a lot of reflection.

5条回答
  •  南方客
    南方客 (楼主)
    2021-01-02 10:22

    dynamic might simplify a limited number of reflection scenarios (where you know the member-name up front, but there is no interface) - in particular, it might help with generic operators (although other answers exist) - but other than the generic operators trick, there is little crossover with generics.

    Generics allow you to know (at compile time) about the type you are working with - conversely, dynamic doesn't care about the type. In particular - generics allow you to specify and prove a number of conditions about a type - i.e. it might implement some interface, or have a public parameterless constructor. dynamic doesn't help with either: it doesn't support interfaces, and worse than simply not caring about interfaces, it means that we can't even see explicit interface implementations with dynamic.

    Additionally, dynamic is really a special case of object, so boxing comes into play, but with a vengence.

    In reality, you should limit your use of dynamic to a few cases:

    • COM interop
    • DLR interop
    • maybe some light duck typing
    • maybe some generic operators

    For all other cases, generics and regular C# are the way to go.

提交回复
热议问题