Here are a few restrictions that you need to keep in mind when using generics:
Properties, operators, indexers, and events cannot be generic. However, these items can be used in a generic class and can make use of the generic type parameters of that class.
The extern modifier cannot be applied to a generic method.
Pointer types cannot be used as type arguments.
If a generic class contains a static field, then each constructed type has its own copy of that field. This means that each instance of the same constructed type shares the same static field. However, a different constructed type shares a different copy of that field. Thus, a static field is not shared by all constructed types.