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