home about talks rss feed  rss

Reflection - Create an instance of a class through a protected method

16 Sep 2010

I had a bit of trouble getting to this, so for self reference more than anything, I thought I d post about it.

Given the following class

        public class MyClass	
               private string _name;
               public string Name { get { return this._name;}}
               protected MyClass(string name)
                   _name = name;		

I thought that the following would be the way to create an instance of it:

    Activator.CreateInstance(typeof(MyClass), BindingFlags.NonPublic, null, new object[] { "MyName" }, CultureInfo.CurrentCulture);
However it throws a MissingMethodException: Constructor on type 'ReflectionCreateInstance.MyClass' not found. However if we add the Binding Flag for instance then it works.
    public void When_creating_with_activator_Must_use_apropriate_binding_flags()
    	string myname = "MyName";
    	var myClass = (MyClass)Activator.CreateInstance(
    					BindingFlags.Instance| BindingFlags.NonPublic, 
    					new object[] { myname }, 
    	Assert.Equal(myname, myClass.Name);
If you try this with <b>type.GetConstructor</b> or <b>type.GetConstructors </b>the result is the same. 

Checking the <a href="" target="_blank">documentation for BindingFlag</a>.Instance I find </span>

<a href=""><img src="" style="display:inline;border-width:0;" title="Capture" height="370" width="674" alt="Capture" border="0"></img></a>

So it was a case of RTFM I guess :D
comments powered by Disqus