You are missing the case where the type parameter differs from the class containing the method.
using System.Runtime.InteropServices;
namespace Test {
[ComVisible(true)]
public abstract class A {
public static void Register(Type type) {
}
public static void Unregister(Type type) {
}
}
[ComVisible(true)]
public class B : A {
}
}
When registerring, the following method will be called:
B.Register(typeof(B))
Since the Register method is part of the class A, the call will be translated to
A.Register(typeof(B))
You may get problems when using typeof(class) instead of type argument.
Hope this help to someone.