京东云服务器推荐配置、多种配置选择,满足不同业务需求!

热门推荐

⭐ 稳定入门选择

配置:2核2G/5M

适用场景:个人站点 / 轻量应用

特点:性价比高,稳定可靠

¥19/月
立即购买
流量友好

☁️ 轻量云主机

配置:2核4G 5M

适用场景:小型业务 / 博客 / 测试环境

特点:流量友好,性能均衡

¥149/年
立即购买
高性能

💻 云服务主机

配置:4核16G 8M

适用场景:中小型服务 / 多并发场景

特点:充足内存与带宽,性能强劲

¥750/年
立即购买
新人专享

🎁 新人福利

新人访问 → 点击 → 最新活动

可获取 3000元 礼券

立即领取
服务端 / C# 教程 / C# 菜鸟教程
C# 动态类型(Dynamic)
C# FileInfoC# 匿名类型

C# 动态类型(Dynamic)

C#4.0(.NET 4.5)引入了一个名为 dynamic 的新类型,它避免了编译时类型检查。dynamic 类型在编译时跳过类型检查;相反,它在运行时解析类型。

动态类型变量是使用关键字 dynamic 定义的。

dynamic MyDynamicVar = 1;

在大多数情况下,编译器会将动态类型编译为对象类型。但是,动态类型变量的实际类型将在运行时解析。

dynamic MyDynamicVar = 1;

Console.WriteLine(MyDynamicVar.GetType());
输出:

System.Int32

dynamic 类型会在运行时根据分配的值更改类型。以下示例显示了动态变量如何根据分配的值更改类型。

static void Main(string[] args)
{
    dynamic MyDynamicVar = 100;
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());

    MyDynamicVar = "Hello World!!";
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());

    MyDynamicVar = true;
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());

    MyDynamicVar = DateTime.Now;
    Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());
}
输出:
值:100,类型:System.Int32
值:Hello World !!,类型:System.String
值:True,类型:System.Boolean
值:01-01-2014,类型:System.DateTime

动态类型变量将隐式转换为其他类型。

dynamic d1 = 100;
int i = d1;
		
d1 = "Hello";
string greet = d1;
		
d1 = DateTime.Now;
DateTime dt = d1;

方法和参数

如果将类对象分配给动态类型,则编译器将不会检查保存自定义类对象的动态类型的正确方法和属性名称。看下面的实例。

class Program
{
    static void Main(string[] args)
    {
        dynamic stud = new Student();

        stud.DisplayStudentInfo(1, "Bill");// 运行时错误,没有编译时错误
        stud.DisplayStudentInfo("1");// 运行时错误,没有编译时错误
        stud.FakeMethod();// 运行时错误,没有编译时错误
    }
}

public class Student
{
    public void DisplayStudentInfo(int id)
    {
    }
}

在上面的示例中,C#编译器不检查参数,参数类型 或 根本不存在。它在运行时验证这些内容,如果无效,则抛出运行时异常。请注意,动态类型不支持Visual Studio IntelliSense。请注意,动态类型不支持Visual Studio IntelliSense。

动态语言运行时(DLR)API提供了支持C#中动态类型的基础结构。

C# FileInfoC# 匿名类型
上一篇:C# 匿名类型
下一篇:C# 类(Class)