extends Binder to create your own binder : Binder « GUI Windows Forms « C# / CSharp Tutorial






using System;
using System.Reflection;
using System.Globalization;
  class MyClass
  {
    DateTime[] dateTimes = new DateTime[10];
    public DateTime this[int index]
    {
      get{ return dateTimes[index]; }
      set{ dateTimes[index] = value;}
    }
    
    
    private DateTime dateOfBirth;
    public DateTime DateOfBirth
    {
        get{ return dateOfBirth; }
        set{ dateOfBirth = value; }
    }
      
    public void Test()
    {
      Console.WriteLine("Test method called");
    }
    
    
    private string field;
    
    public string Property
    { 
      get{ return field; }
      set{ field = value; }
    }
    
  }


    class MainClass{
    
    static void Main(string[] args)
    {
      Type type = typeof(MyClass);
      object o = Activator.CreateInstance(type);
      type.InvokeMember( "DateOfBirth", 
        BindingFlags.Instance | BindingFlags.SetProperty |
        BindingFlags.Public, new DateTimeBinder(), 
        o, new object[]{@"02/12/1966"});
        
      Console.WriteLine(((MyClass)o).DateOfBirth);

    }
    }    
    public class DateTimeBinder : Binder
    {
      public override MethodBase BindToMethod(
        BindingFlags bindingAttr,
        MethodBase[] match,
        ref object[] args,
        ParameterModifier[] modifiers,
        CultureInfo culture,
        string[] names,
        out object state)
      {
        state = null;
        return match.Length == 1 ? match[0] : null;
      }
      
      public override FieldInfo BindToField(
        BindingFlags bindingAttr,
        FieldInfo[] match,
        object value,
        CultureInfo culture)
      {
        return null;
      }
      
      public override MethodBase SelectMethod(
        BindingFlags bindingAttr,
        MethodBase[] match,
        Type[] types,
        ParameterModifier[] modifiers)
      {
        return null;
      }
      
      public override PropertyInfo SelectProperty(BindingFlags bindingAttr,PropertyInfo[] match,Type returnType,Type[] indexes,ParameterModifier[] modifiers){
        return null;
      }
      
      public override object ChangeType(object value,Type type,CultureInfo culture)
      {
        if ( value.GetType() != typeof(string)) return value;
        try
        {
          return Convert.ToDateTime(value);
        }
        catch
        {
          return value;
        }
      }
      public override void ReorderArgumentArray(ref object[] args,object state){}
    }








23.86.Binder
23.86.1.extends Binder to create your own binder
23.86.2.extends ISupportInitialize