Search code examples
c#constructorinstantiationprivate-constructor

How to instantiate an object with a private constructor in C#?


I definitely remember seeing somewhere an example of doing so using reflection or something. It was something that had to do with SqlParameterCollection which is not creatable by a user (if I'm not mistaken). Unfortunately cannot find it any longer.

Can anyone please share this trick here? Not that I consider it a valid approach in development, I'm just very interested in the possibility of doing this.


Solution

  • // the types of the constructor parameters, in order
    // use an empty Type[] array if the constructor takes no parameters
    Type[] paramTypes = new Type[] { typeof(string), typeof(int) };
    
    // the values of the constructor parameters, in order
    // use an empty object[] array if the constructor takes no parameters
    object[] paramValues = new object[] { "test", 42 };
    
    TheTypeYouWantToInstantiate instance =
        Construct<TheTypeYouWantToInstantiate>(paramTypes, paramValues);
    
    // ...
    
    public static T Construct<T>(Type[] paramTypes, object[] paramValues)
    {
        Type t = typeof(T);
    
        ConstructorInfo ci = t.GetConstructor(
            BindingFlags.Instance | BindingFlags.NonPublic,
            null, paramTypes, null);
    
        return (T)ci.Invoke(paramValues);
    }