• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)

C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了expandoobject,c expandoobject,dynamicobject,c dynamicobject,c#dynamic等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

ExpandoObject:表示一个对象,该对象包含可在运行时动态添加和移除的成员。

Console.WriteLine(dynEO.number);
dynEO.Increment();
Console.WriteLine(dynEO.number);
</div>
dynEO.number 中number是动态添加属性。

dynEO.Increment 中Increment 是动态添加的Action 委托。

枚举ExpandoObject的所有成员:

结果如下:

clip_image002

接收属性更改的通知:

    Console.ReadLine();
}

static void Program_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    Console.WriteLine("属性{0} 已更改", e.PropertyName);
}
</div>

结果:

clip_image002[5]

System.Dynamic.DynamicObject:提供用于指定运行时的动态行为的基类

新建类DynamicProduct,基本和Product类似:

image

可以看到继承了DynamicObject后,可以override 一大堆TryXXX的方法了。

重点需要了解的是:

假设sampleObject 就是dynamicObject

TryGetMember

在调用 int number = sampleObject.Number.时使用

TrySetMember

在调用sampleObject.Number = number 时使用

TryInvoke

在调用sampleObject(100) 时使用

TryInvokeMember

在调用sampleObject.someMethod(100) 时使用

完整的代码如下:

    public void ShowProduct()
    {
        Console.WriteLine("Id={0} ,Name={1}", Id, name);
    }

    #region Override DynamicObject 的方法

    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return base.GetDynamicMemberNames();
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        Console.WriteLine("TryGetMember被调用了,Name:{0}", binder.Name);
        return base.TryGetMember(binder, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        Console.WriteLine("TrySetMember被调用了,Name:{0}", binder.Name);
        return base.TrySetMember(binder, value);
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        Console.WriteLine("TryInvoke被调用了");
        return base.TryInvoke(binder, args, out result);
    }

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        Console.WriteLine("TryInvokeMember被调用了,Name:{0}", binder.Name);
        return base.TryInvokeMember(binder, args, out result);
    }

    #endregion
}
</div>
Main函数代码如下:

    dynProduct.name = "n1"; //调用TrySetMember方法
    dynProduct.Id = 1;
    dynProduct.Id = dynProduct.Id + 3;
    dynProduct.ShowProduct();

    Console.ReadLine();
}
</div>

结果如下:

clip_image002[7]

理论上来说,应该输出:

TrySetMember          :设置name字段

TrySetMember          :设置Id属性

TryGetMember        

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(下)
  • C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)

相关文章

  • 2017-05-28C#灰度化图像的实例代码
  • 2017-05-28c#二维码生成的代码分享
  • 2017-05-28C#反射应用实例
  • 2017-05-28C#窗体读取EXCEL并存入SQL数据库的方法
  • 2017-05-28C#在Unity游戏开发中进行多线程编程的方法
  • 2017-05-28C#定位txt指定行的方法小例子
  • 2017-05-28C#实现winform中RichTextBox在指定光标位置插入图片的方法
  • 2017-05-28C#特性 扩展方法
  • 2017-05-28C#实现顺序表(线性表)完整实例
  • 2017-05-28浅谈c#中const与readonly区别

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中dynamic关键字的正确用法(推荐)
    • C#使用StreamWriter写入文件的方法
    • C#中Web.Config加密与解密的方法
    • C#网页分页标签生成
    • C#.NET实现网页自动登录的方法
    • C#编程中使用ref和out关键字来传递数组对象的用法
    • 浅谈Silverlight 跨线程的使用详解
    • 深入理解C# DateTime日期格式化
    • C#分屏控件用法实例
    • C#精确计算年龄的方法分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有