Following is the list of a couple of shortcomings:
- Static/shared members: COM objects are fundamentally different from the .Net types. One of the differences is the lack of support for the static/shared members.
- Parameterized Constructors: COM types don't allow parameters to be passed into a constructor. This limits the control you have over the initialization and the use of the overloaded constructors.
- Inheritance: One of the biggest issues, is the limitation that the COM objects placed on the inheritance chain. Members that shadow members in a base class aren't recognizable, and therefore, aren't callable or usable in the real sense.
- Portability: Operating Systems other than the Windows don't have the registry. Reliance on the Windows registry limits the number of environments a .Net application can be ported to.