dynamic关键字,动态行为的使用

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Reflection;
using System.Reflection.Emit;
public class TestClass
{
   public void MethodOut(string aa)
    {
        Console.WriteLine(aa);
    }
}
/// <summary>
/// 这是一个定义属性,字段的重构类
/// </summary>
public class DynamicDictionary : DynamicObject
{
    // The inner dictionary.
    Dictionary<string, object> dictionary
        = new Dictionary<string, object>();

    // This property returns the number of elements
    // in the inner dictionary.
    public int Count
    {
        get
        {
            return dictionary.Count;
        }
    }
    //***************以下是重写DynamicObject类的方法********************
    //如果您尝试获取类中未定义的属性的值,则调用此方法。
    public override bool TryGetMember(
        GetMemberBinder binder, out object result)
    {
        // 将属性名称转换为小写,使属性名称不区分大小写。
        string name = binder.Name.ToLower();

        // 如果在字典中找到属性名称,则将结果参数设置为属性值并返回true。 否则,返回false。
        return dictionary.TryGetValue(name, out result);
    }

    // 如果您尝试设置类中未定义的属性的值,则调用此方法。
    public override bool TrySetMember(
        SetMemberBinder binder, object value)
    {
        // 将属性名称转换为小写,使属性名称不区分大小写。
        dictionary[binder.Name.ToLower()] = value;

        // 你总是可以给字典添加一个值,所以这个方法总是返回true。
        return true;
    }
}

class Program
{
    static void Main(string[] args)
    {
        //和Dictionary配合用法****************************
        dynamic person = new DynamicDictionary();
        person.FirstName = "Ellen";
        person.LastName = "Adams";
        person.sss = 55;
        Console.WriteLine(person.FirstName + " " + person.lastname);
        Console.WriteLine(
            "Number of dynamic properties:" + person.Count);
        int A = person.sss;
        //这里会报错,因为没有这个值
        // Console.WriteLine(person.address);


        // //和反射配合用法****************************
        dynamic sample2 = new TestClass();
         sample2.MethodOut("qqqq");
        //获取类型,这点和Var是一样的*************************
        String s = sample2.GetType().Name;
        dynamic dy = 123;
        String s1 = dy.GetType().Name;
        var sd = false;
      string dfg=  sd.GetType().Name;
    }
}

 

上一篇:RAC之DRM解析


下一篇:Python基础Day3