Creare istanze di oggetti con parametri opzionali mediante Reflection
In questo esempio viene mostrato come è possibile automatizzare la creazione di istanze che prevedono parametri opzionali nel costruttore mediante reflection, in particolare l'esempio si riferisce al caso in cui un sottoinsieme dei parametri necessari per creare l'istanza derivino dagli argomenti passati a linea di comando:
Creiamo un progetto console che utilizzeremo per testare il codice che andremo a scrivere:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreateObjectInstanceWithOptionalParameters
{
class Program
{
static void Main(string[] args)
{
}
}
}
Quindi aggiungiamo un'enumerazione che utilizzeremo a scopo di esempio:
public enum MyEnum
{
One,
Two,
}
Ed una classe che prevede parametri opzionali nel costruttore:
public class MyClass
{
public MyClass(MyEnum myEnum = MyEnum.One, int myInt = 12, double myDouble = 34.9)
{
MyEnum = myEnum;
MyInt = myInt;
MyDouble = myDouble;
}
public MyEnum MyEnum { get; set; }
public int MyInt { get; set; }
public Double MyDouble { get; set; }
}
Attraverso la funzione riportata di seguito è possibile creare un'istanza dove una parte, tutti o nessuno dei parametri necessari per creare l'istanza sono specificati come argomenti (parametro arguments)
static T CreateDefaultInstance(String[] arguments)
{
var ctrs = typeof(T).GetConstructors();
System.Reflection.ConstructorInfo ci = ctrs.FirstOrDefault();
var l = new List