Csharp/C Sharp by API/System.Reflection/ConstructorInfo

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

ConstructorInfo.GetParameters()

<source lang="csharp"> using System; using System.Reflection;

class MyClass {

 public MyClass(int i) { 
   Console.WriteLine("Constructing MyClass(int). "); 
 } 

 public MyClass(int i, int j) { 
   Console.WriteLine("Constructing MyClass(int, int). "); 
 } 

 public int sum() { 
   return 0; 
 } 

 public bool isBetween(int i) { 
   return false; 
 } 

 public void set(int a, int b) { 
   Console.Write("Inside set(int, int). "); 
 } 

 public void set(double a, double b) { 
   Console.Write("Inside set(double, double). "); 
 } 

 public void show() { 
   Console.WriteLine("Values"); 
 } 

}

class MainClass {

 public static void Main() { 
   Type t = typeof(MyClass); 

   // Get constructor info. 
   ConstructorInfo[] ci = t.GetConstructors(); 

   Console.WriteLine("Available constructors: "); 
   foreach(ConstructorInfo c in ci) { 
     // Display return type and name. 
     Console.Write("   " + t.Name + "("); 

     // Display parameters. 
     ParameterInfo[] pi = c.GetParameters(); 

     for(int i=0; i < pi.Length; i++) { 
       Console.Write(pi[i].ParameterType.Name + " " + pi[i].Name); 
       if(i+1 < pi.Length) 
          Console.Write(", "); 
     } 

     Console.WriteLine(")"); 
   } 
   Console.WriteLine(); 
 } 

}

</source>


ConstructorInfo.Invoke

<source lang="csharp">

using System; using System.Text; using System.Reflection; class MainClass {

   public static void Main ()
   {
       Type type = typeof(StringBuilder);
       Type[] argTypes = new Type[] { typeof(System.String), typeof(System.Int32) };
       ConstructorInfo cInfo = type.GetConstructor(argTypes);
       object[] argVals = new object[] { "Some string", 30 };
       // Create the object and cast it to StringBuilder.
       StringBuilder sb = (StringBuilder)cInfo.Invoke(argVals);
       Console.WriteLine(sb);
   }

}

</source>