自定义动态对象

1,自定义动态对象需要继承DynamicObject类

2,可根据需要,重写不同的DynamicObject方法

-----------------------------------------------------DynamicClass.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Dynamic;
namespace ConsoleApplication3
{
    public class DynamicClass:DynamicObject
    {
        Dictionary<string, object> _dynamicData = new Dictionary<string, object>();
        /// <summary>
        /// 为获取成员值的操作提供实现
        /// </summary>
        /// <param name="binder"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            bool success = false;
            result = null;
            if (_dynamicData.ContainsKey(binder.Name))
            {
                result = _dynamicData[binder.Name];
                success = true;
            }
            else
            {
                result = "Property Not Found";
                success = false;
            }
            return success;
        }
        /// <summary>
        /// 为设置成员值的操作提供实现
        /// </summary>
        /// <param name="binder"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            _dynamicData[binder.Name]= value;
            return true;
        }
    }
}

-----------------------------------------------------主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Dynamic;
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic dyn = new DynamicClass();
            dyn.name = "a";
            dyn.aa = new Func<string,string>(r => r);
            dyn.name = "b";
            Console.WriteLine(dyn.name+"|"+ dyn.aa("b")); //输出:b|b
            Console.ReadKey();
        }
    }
}
时间: 2024-11-12 07:56:53

自定义动态对象的相关文章

Android自定义动态布局 — 多图片上传

Android自定义动态布局 - 多图片上传 本文介绍Android中动态布局添加图片,多图片上传. 项目中效果图:    技术点: 1.动态添加格局中的线条和添加图片的+号 2.多张图片异步上传 首先来看一下布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layo

vue2入坑随记(二) -- 自定义动态组件

学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.extend 思路就是拿到组件的构造函数,这样我们就可以new了.而Vue.extend可以做到:https://cn.vuejs.org/v2/api/#Vue-extend // 创建构造器 var Profile = Vue.extend({ template: '<p>{{firstName

Unity动态对象优化

对于静态对象,Unity可以使用通过勾选Static,然后让Unity自身进行优化Draw Calls,但是对于动态对象,Unity在这方面没有处理,这就需要我们自己去实现,实现的原理就是首先去遍历每个对象的SkinnderMeshRenderer,然后将其所有的动态对象组合成一个大的对象并且将骨骼动画赋值给他,这样,我们就实现了动态对象的优化,代码如下: public static void CombineToMesh(GameObject _go)     {         Skinned

Laravel 5.5 的自定义验证对象/类

本文和大家分享的主要是Laravel 5.5 的自定义验证对象/类相关内容,一起来看看吧,希望对大家学习Laravel有所帮助. Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代. Laravel 中的表单验证是比较方便的,而且内置了大量的可用验证规则,但不管官方提供了多少,总还是会有满足不了需求的时候.很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend来扩展一个自

在JavaScript中生成自定义的对象

使用对象便于组织信息.下面我们介绍如何在JavaScript中生成自定义的对象. ---------------------- JavaScript 对象 在前面几章中我们学到JavaScript中有些内置的对象,比如String, Date, Array等等.除此之外,你还可以定义自己的对象. 对象是一种特殊的数据,含有属性和函数. 下面让我们用一个例子来说明:比如一个人是一个对象.属性是与对象有联系的值,比如人的属性包括姓名,身高,体重,年龄,肤色,眼睛的颜色等等.所有人都有这些属性,但是每

QT: QByteArray储存二进制数据(包括结构体,自定义QT对象)

因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类 1. 利用memcpy拷贝内存数据 //自定义person结构体 Cpp代码   typedef struct { int age; char name[20]; }Person; //向QByteArray写入多个结构体 void writeStruct() { QByteArray ba; ba.resize(2*sizeof(Pers

对NSArray中自定义的对象进行排序

本文译自How to sort NSArray with custom objects. 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天程序则又一个Friend类,点菜程序会有一个Recipe类等.有时候我们希望在程序中显示的列表数据是按照一定顺序进行排列的,本文我们就来看看在iOS中有哪些方法可以对NSArray中的对象进行排序.下面是目录: 小引 使用NSComparator进行排序 使用NSDescriptor进行

动态对象DynamicObject实现让字典书写更优美

我想用过MVC的人都知道一件事,viewbag的值是存储在viewdata里面的. 先看以下组图: 看了上图是不是感觉很神奇,Dictionary<string, object>也可以这样使用~ 实现主要继承了DynamicObject 接下来直接贴代码: /// <summary> /// 动态对象 /// </summary> public class VarObject : DynamicObject { /// <summary> /// 数据字段

动态对象创建(二)重载new和delete

前言 上文我简单介绍了一下动态对象创建的方法,这一篇文章的内容主要是对重载new和delete做一些讲解,也希望能够得到博友们的指点,在这里谢过大家. 通常我们为了一些目的而使用new和delete的内存分配系统,但是在特殊情况下,它并不能够满足需要.最常见的改变分配系统的原因是出于效率考虑:也许要创建和销毁一个特定的类的非常多的对象以至于这个运算变成了速度的瓶颈.C++允许重载new和delete来实现我们自己的存储分配方案,所以可以用它来处理问题. 另一个问题就是堆碎片:分配不同大小的内存可