sirp Posted August 26, 2020 Posted August 26, 2020 Run Constructor even Activator.CreateInstance gives Exception Assembly asm = Assembly.LoadFrom(@"X:\xxxasd.exe"); Type kd = asm.GetType("keydata"); // Create an instance of the type object classInstance = Activator.CreateInstance(keydata, null); ----------> This always throws errorr ..tried different approaches i.e with other parameters and Bindingflags ... There is also System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(RuntimeTypeHandle type), which additionally guarantees that the static constructor is only called once, regardless how many times the method is called: Type myClass = typeof(MyClass); System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(myClass.TypeHandle); https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.runtimehelpers.runclassconstructor?redirectedfrom=MSDN&view=netcore-3.1#System_Runtime_CompilerServices_RuntimeHelpers_RunClassConstructor_System_RuntimeTypeHandle_ Even though it is possible, it may not be a good idea to do that. However, if you access any member of the class, the runtime will invoke the static constructor automatically for you. For example: // Read the field 'SomeValue', so that the runtime invokes static ctor Type myClass = typeof(MyClass); myClass.GetField("SomeValue").GetValue(null); Since accessing a field of the class cannot cause any side-effect (other than initialization of the class and call to the static constructor), this should be a relatively safe way to do this in general (however, it will stil work only for classes with some static field). This has the benefit that it guarantees that the type constructor will be invoked at most once which is quite important.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now