ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-18 14:03:24  阅读:134  来源: 互联网

标签:dictionary person dynamic 关键字 using 动态 public 属性


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;
    }
}

 

标签:dictionary,person,dynamic,关键字,using,动态,public,属性
来源: https://www.cnblogs.com/haoweiwei/p/15704887.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有