lundi 5 octobre 2015

Reflection for Constructors

Here:

defaultCon binds itself to Dog() Constructor

legCon binds itself to Dog(int legs) Constructor

Why do we specify

new Type[0] in Line X even though there are no parameters in Default Constructor

(new[] { typeof(int) }) in Line Y ! Curly braces inside argument/parameter field.Similar problem in Line Z.

I searched on StackOverflow - this answer came close but doesn't answer my question. Here is my code:

namespace Coding
{
    internal class Dog
    {
        public int NumberOfLegs { get; set; }
        public Dog()
        {
            NumberOfLegs = 4;
        }

        public Dog(int legs)
        {
            NumberOfLegs = legs;
        }
    }

    public class Class1
    {
        static void Main(string[] args)
        {
            /*line X*/  var defaultCon = typeof(Dog).GetConstructor(new Type[0]); // Get Default Constructor without any params
            /*line Y*/  var legCon = typeof(Dog).GetConstructor(new[] { typeof(int) });//get constructor with param int

            var defaultDog = defaultCon.Invoke(null) as Dog;//invoke defaultCon for a Dog Object
            /*Line Z*/  var legDog = legCon.Invoke(new object[] { 5 });//invoke legCon for a Dog object(Sets number of legs as 5) as Dog

            Console.Read();
        }
    }
}





Aucun commentaire:

Enregistrer un commentaire