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


输出如下:

C# Dynamic关键字之:调用属性、方法、字段的实现方法

修改dynProduct.Id=”1”,此时"1”是字符串

运行:

C# Dynamic关键字之:调用属性、方法、字段的实现方法

因为product的Id属性是int型

修改dynProduct.ShowProducT(); 运行:

C# Dynamic关键字之:调用属性、方法、字段的实现方法

因为product 包含ShowProduct 的方法,但是并没有包含ShowProducT的方法,

所以dynamic不支持大小写不同。根本原因是因为C#也不支持。

修改Product中name的修饰符:将Public改为private:

private string name;

再次运行代码:

C# Dynamic关键字之:调用属性、方法、字段的实现方法

因为name是private,外部无法访问。。。

但是反射好像是可以的啊?

那么尝试下反射吧:


Type productType = typeof(Product);
Product p = new Product();

FieldInfo fi = productType.GetField("name",
    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
fi.SetValue(p, "通过反射设置的值");

运行,结果如下:

C# Dynamic关键字之:调用属性、方法、字段的实现方法

因为在某些安全限制条件下,是不运行读取和设置私有字段的,例如在silverlight中。所以微软大概出于对这一点的考虑,所以dynamic不支持私有字段的读取和设置吧,以上纯属个人猜想。

标签:属性,方法,字段
0
投稿

猜你喜欢

  • JavaWeb工程中集成YMP框架快速上手

    2023-11-24 12:15:12
  • 基于Mock测试Spring MVC接口过程解析

    2023-11-27 12:04:30
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解

    2022-07-24 13:56:18
  • 详解Spring Boot中使用AOP统一处理Web请求日志

    2021-08-24 15:50:17
  • C#文件流读写和进度回调示例详解

    2022-08-12 14:52:31
  • java LeetCode刷题稍有难度的贪心构造算法

    2022-01-06 20:56:21
  • 详解Java的Spring框架下bean的自动装载方式

    2022-10-23 08:13:59
  • Java 如何将网络资源url转化为File文件

    2023-05-28 09:23:37
  • Springboot JPA 枚举Enum类型存入到数据库的操作

    2023-11-25 16:11:40
  • 一篇文章带你入门Java变量

    2021-09-21 07:46:02
  • Java 1.8使用数组实现循环队列

    2022-02-11 04:00:10
  • C#实现的json序列化和反序列化代码实例

    2022-04-05 22:24:08
  • Spring4下validation数据校验无效(maven)的解决

    2022-01-24 03:01:04
  • 基于javaWeb 项目SSM配置要点及可能遇到的问题和解决方法

    2023-10-27 21:45:16
  • SpringBoot整合WebSocket实现聊天室流程全解

    2021-07-03 23:35:21
  • Java项目开发中实现分页的三种方式总结

    2021-08-25 21:36:36
  • maven setting.xml文件配置禅定之旅

    2023-01-08 12:07:19
  •  Java图形化界面编程实现简单计算器

    2021-06-06 17:23:09
  • 序列化版本号serialVersionUID的作用_动力节点Java学院整理

    2022-08-14 06:39:02
  • Java硬币翻转倍数递增试算实例

    2021-09-29 08:39:22
  • asp之家 软件编程 m.aspxhome.com