C#用dynamic一行代码实现反射操作

dynamic简介

dynamic是.NET Framework4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译时默认dynamic对象支持你想要的任何特性。

dynamic简化反射实现

使用dynamic来简化反射实现是一种比较常见的编程技巧,它可以减少代码的复杂性并提高可读性。下面是一个使用dynamic来简化反射实现的示例:

// 定义一个类
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}
// 创建一个对象并设定属性值
var person = new Person
{
    Name = "刘备",
    Age = 30,
    Gender = "男"
};

// 使用反射获取属性值
var type = person.GetType();
var properties = type.GetProperties();
foreach (var property in properties)
{
    var value = property.GetValue(person);
    Console.WriteLine($"{property.Name}:{value}");
}

// 使用dynamic来简化反射实现
dynamic dynamicPerson = person;
Console.WriteLine($"Name:{dynamicPerson.Name}, Age:{dynamicPerson.Age}, Gender:{dynamicPerson.Gender}");
 //欢迎公众号:DOTNET开发跳槽,领取海量面试题

可以看到,使用dynamic来简化反射实现可以将代码变得更加简洁易读,同时也可以避免一些繁琐的反射操作。使用dynamic可能会带来一些性能上的损失,应该根据具体情况进行选择。具体会不会,下面实验一下。

dynamic与反射的性能对比

这里首先新建一个类和一个两数相加的方法,然后分别使用反射和dynamic来调用这个类的方法,并循环数次,来对比它们的性能。代码如下:

 #region 反射和dynamic的对比
 int times = 1000000;
 DynamicTest reflectTest = new DynamicTest();
 var addMethod = typeof(DynamicTest).GetMethod("Add");
 Stopwatch watchl = Stopwatch.StartNew();
 for (var i = 0;i< times; i++)
 { addMethod.Invoke(reflectTest, new object[] { 1, 2 }); }
 Console.WriteLine($"反射耗时:{watchl.ElapsedMilliseconds}毫秒"); 
  dynamic dynamicTest = new DynamicTest();
 Stopwatch watch2 = Stopwatch.StartNew();
 for (int i =0;i< times; i++)
      dynamicTest.Add(1,2);
 Console.WriteLine($"dynamic耗时:{watch2.ElapsedMilliseconds} 毫秒");
 #endregion
 //测试的类
public class DynamicTest
{
    public string Name{get; set; }
    public int Add(int a, int b)
    {
         return a + b;
    }
}
  //欢迎公众号:DOTNET开发跳槽,领取海量面试题

100万次的效果:

图片

图片

1万次的效果:

图片

图片

可见100万次循环的效果dynamic要好点,1万次反射耗时小于dynamic。为了效果,所以每一次实验运行两次。

结语

由上可以看出dynamic的确可以简化反射,让代码更加简洁,可读性更强。但是从对比来看,dynamic在低数量调用的使用上性能要比反射弱太多,比较大的数量调用来说它们不相上下。建议如果你的代码对性能要求不太高的情况下,可以使用dynamic来简化反射。

参考:微软官方文档,《改善C#程序的157个建议》

来源公众号:DotNet开发跳槽

原文链接:https://www.cnblogs.com/xbhp/p/17349082.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#用dynamic一行代码实现反射操作 - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月28日

相关文章

  • .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)

    在前两篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) 我们对.netcore部署到linux有了一个充分的了解,已经可以满足应用要求了,这篇文章我们继续深入带你了解使用Doker+jexus或Nginx来部署.net co…

    C# 2023年4月30日
    00
  • C#中的除法运算符与VB.NET中的除法运算符

    好的。针对“C#中的除法运算符与VB.NET中的除法运算符”,我会就这个话题,进行详细讲解,以下是完整的攻略: C#中的除法运算符 / C#中的除法运算符 / 是将两个数相除并返回结果的算术运算符。如果两个操作数都是整数,则返回的结果也是整数,省略小数部分。如果其中一个操作数是浮点数,则返回的结果也是浮点数,包括小数部分。下面是一个简单的示例: int a …

    C# 2023年6月7日
    00
  • .NET中lambda表达式合并问题及解决方法

    以下是“.NET中lambda表达式合并问题及解决方法”的完整攻略: 什么是lambda表达式 Lambda表达式是一种匿名函数,它可以不方法情况下创建一个委托。在.NET中,Lambda表达式通常用于LINQ查询和事件处理程序。 lambda表达式合并在中,当我们需要将多个Lambda表达式合并为一个时,可能会遇到一些问题。例如,我们可能需要将多个查询条件…

    C# 2023年5月12日
    00
  • ASP.NET Core中Razor页面的Handlers处理方法详解

    ASP.NET Core中Razor页面的Handlers处理方法详解 在ASP.NET Core中,Razor页面是一种用于创建Web应用程序的强大工具。Razor页面可以使用C#代码和HTML标记来创建动态Web页面。Handlers是一种用于处理Razor页面中的表单提交和其他用户交互的方法。本攻略将提供一些示例,演示如何在ASP.NET Core中使…

    C# 2023年5月17日
    00
  • C# Path.Combine – 合并多个路径

    C#的Path.Combine方法是用于拼接多个路径的方法。它可以接收一个或多个路径参数,并返回一个由这些路径组成的字符串。这个方法可以方便地组合文件路径、文件夹路径等。 使用方法: string result = Path.Combine(string path1, string path2); 参数 path1 和 path2 表示要拼接的路径。如果 p…

    C# 2023年4月19日
    00
  • C#中调用Windows API的技术要点说明

    当我们需要使用Windows系统提供的某些功能时,我们可以使用Windows API进行调用。在C#中,调用Windows API需要遵循以下的技术要点: 使用DllImport特性声明API函数 DllImport特性允许我们声明和使用Windows API函数。使用DllImport特性需要注意以下几点: 我们需要指定Windows API函数的名称、所…

    C# 2023年5月31日
    00
  • .net的序列化与反序列化实例

    . 什么是序列化和反序列化 序列化(Serialization)指将对象转化为可以存储或传输的格式的过程。在此过程中,对象中的属性值被提取并打包为一组二进制数据,可以被序列化为XML、JSON、二进制等格式。在.NET中,序列化包含了 Binary serialization,XML serialization和 JSON serialization几种方式…

    C# 2023年5月31日
    00
  • win10下ASP.NET Core部署环境搭建步骤

    win10下ASP.NET Core部署环境搭建步骤 ASP.NET Core是一个跨平台的开源Web框架,可以在Windows、Linux和macOS等操作系统上运行。在本攻略中,我们将介绍如何在Windows 10操作系统上搭建ASP.NET Core部署环境,并提供两个示例说明。 1. 安装.NET Core SDK 在Windows 10操作系统上搭…

    C# 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部