C# Dynamic关键字之:调用属性、方法、字段的实现方法
发布时间:2022-09-22 04:23:39
新建类Product:
class Product
{
public string name;
public int Id { get; set; }
public void ShowProduct()
{
Console.WriteLine("Id={0} ,Name={1}", Id, name);
}
}
Main方法代码如下:
static void Main(string[] args)
{
//dynamic对象
dynamic dynProduct = new Product();
//设置name字段
dynProduct.name = "n1";
//设置Id属性
dynProduct.Id = 1;
dynProduct.Id = dynProduct.Id + 3;
//调用ShowProduct方法
dynProduct.ShowProduct();
Console.ReadLine();
}
输出如下:
修改dynProduct.Id=”1”,此时"1”是字符串
运行:
因为product的Id属性是int型
修改dynProduct.ShowProducT(); 运行:
因为product 包含ShowProduct 的方法,但是并没有包含ShowProducT的方法,
所以dynamic不支持大小写不同。根本原因是因为C#也不支持。
修改Product中name的修饰符:将Public改为private:
private string name;
再次运行代码:
因为name是private,外部无法访问。。。
但是反射好像是可以的啊?
那么尝试下反射吧:
Type productType = typeof(Product);
Product p = new Product();
FieldInfo fi = productType.GetField("name",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
fi.SetValue(p, "通过反射设置的值");
运行,结果如下:
因为在某些安全限制条件下,是不运行读取和设置私有字段的,例如在silverlight中。所以微软大概出于对这一点的考虑,所以dynamic不支持私有字段的读取和设置吧,以上纯属个人猜想。


猜你喜欢
- 区别一如果Mybatis Plus是扳手,那Mybatis Generator就是生产扳手的工厂。通俗来讲——MyBatis:一种操作数据库
- maven简介及优势 maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告
- 题目:若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的
- 面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programm
- 一、前言微信接口调用验证最终需要用到的三个参数noncestr、timestamp、signature:接下来将会给出获取这三个参数的详细代
- 本文实例讲述了WCF实现的计算器功能。分享给大家供大家参考,具体如下:对于WCF,我们有了前面的理论基础,今天通过一个计算器的实例主要给大家
- 样式如下所示:布局:layoutdialog_set_pwd.xml<?xml version="." encod
- 编写上位机与下位机通信的时候,涉及到协议的转换,比较多会使用到二进制。传统的方法,是将数据整体获取到byte数组中,然后逐字节对数据进行解析
- 这篇文章主要介绍了Java方法重载Overload原理及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 今天碰到一个非常奇怪的问题: 在Android中ImageView无法显示加载的本地SDCard图片。 具体过程是:先调用本地照相机程序摄像
- 本文实例讲述了Java基于socket实现的客户端和服务端通信功能。分享给大家供大家参考,具体如下:以下代码参考马士兵的聊天项目,先运行Ch
- 单点登录概念单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系
- 一、简介众所周知,值类型变量不能null,这也是为什么它们被称为值类型。但是,在实际的开发过程中,也需要值为null的一些场景。例如以下场景
- 近期在项目中,策划给出了一个需求就是,让按钮按照一个轮盘的轨迹进行滑动的效果,经过一番测试,实现了初步的效果。我这里区分了横向滑动和纵向滑动
- 最近项目里面用到了一个日期选择器,实现现在主流的WheelView滑动选择,整理了下,做了个Demo.废话不多说,直接上代码.主布局:act
- 1.概念1.AOP技术简介AOP 为Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运
- 前言最近数据库大作业要连接数据库,看了很多博客文章终于连接好了,但是没有看到一篇博客是能直接连接完成的,所以在这记录一下希望能帮助大家sql
- 协程属于Kotlin中非常有特色的一项技术,因为大部分编程语言中是没有协程这个概念的。那么什么是协程呢?它其实和线程有点相似,可以简单地将它
- 在 Java 中,LinkedList 和 ArrayList 的性能是不同的,具体取决于你所需要的操作。对于频繁的插入和删除操作,Link
- 什么是Java NIO?同步非阻塞io模式,拿烧开水来说,NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,