📜  c# 9.0 动态 nedir - C# (1)

📅  最后修改于: 2023-12-03 15:13:48.512000             🧑  作者: Mango

C# 9.0 动态 nedir - C#

在 C# 9 中,动态的概念得到了改进,增加了一些新的用例。本篇文章将介绍 C# 9.0 动态的概念,包括动态的定义、使用方法和示例。

动态的定义

动态类型是在运行时确定其类型的类型。在许多编程语言中,动态类型是一种常见的类型。如果一个变量是动态类型,那么它可以存储任何类型的对象。C#中的动态类型用 dynamic 关键字定义,代码如下:

dynamic dynObj = 100;
Console.WriteLine(dynObj.GetType()); // 输出“System.Int32”
dynObj = "Hello World";
Console.WriteLine(dynObj.GetType()); // 输出“System.String”
动态的使用方法
动态方法调用

动态类型的一个常见用例是动态方法调用。 在 C# 9 中,我们可以使用动态类型调用动态的方法。 示例如下:

dynamic dynObj = new { Name = "张三", Age = 18 };
Console.WriteLine(dynObj.GetType()); // 输出“<>f__AnonymousType0`2[System.String,System.Int32]”
Console.WriteLine(dynObj.Name); // 输出“张三”

dynObj = new List<int> { 1, 2, 3 };
Console.WriteLine(dynObj.GetType()); // 输出“System.Collections.Generic.List`1[System.Int32]”
Console.WriteLine(dynObj.Count); // 输出“3”
动态调用静态方法

在原来的 C# 版本中,我们无法通过动态类型调用静态成员方法。但在 C# 9 中,我们可以通过扩展方法库来使用动态类型调用静态方法,并且这个库使用了表达式目录树来实现。 示例如下:

public static class MyExtensions
{
    public static dynamic AsDynamic<T>(this T obj)
    {
        return obj;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var list = new[] { 1, 2, 3 };
        var sum = list.AsDynamic().Sum(); // 动态调用静态方法
        Console.WriteLine(sum); // 输出“6”
    }
}
动态调用实例化方法

在 C# 9 中,我们可以使用动态类型去调用实例化方法,使得代码更加灵活和简洁。 示例如下:

class Program
{
    static void Main(string[] args)
    {
        var dynObj = new AssemblyLoadContext().AsDynamic();
        dynObj.LoadFromAssemblyPath("c:\\temp\\ClassLibrary1.dll");
    }
}
总结

本文简单介绍了 C# 9 中动态类型的使用方法:包括动态调用方法、动态调用静态方法、动态调用实例化方法等,这些用法都可以使代码变得更加灵活和简洁。但是需要注意的是,动态类型可能会造成运行时错误,所以在使用动态类型时必须小心。