9_dynamic动态类型与object类型的区别

C# 中 dynamic 动态类型与 object 类型的区别

1. object 类型

  • object 类型是 .NET 中 System.Object 类的别名。
  • 在 C# 中,所有类型(预定义、用户定义、引用类型、值类型)都直接或间接继承自 Object
  • 因此,我们可以将任何类型的值用 object 对象来接收。

2. dynamic 动态类型

  • 动态类型在编译时会绕过类型检查,从而在运行时解析。
  • 因此,动态类型只存在于编译时,不存在于运行时。

3. 两者的区别

区别 object 类型 dynamic 动态类型
类型检查 编译时进行类型检查 运行时进行类型检查
性能 性能较高 性能较低
使用场景 通用类型转换 延迟类型检查、动态语言互操作

object 类型示例

public class Person
{
public string Name { get; set; } = "Alice";
}
public class Program
{
public static void Main(string[] args)
{
object obj = new Person();
// ❎ 因为在编译时进行类型检查,所以无法直接访问Name属性
// System.Console.WriteLine(obj.Name);
// ✅ 类型转换之后,可以访问Name属性
Person person = obj as Person;
if (person != null)
{
Console.WriteLine(person.Name);
}
}
}

dynamic 动态类型示例

public class Animal
{
public virtual void Speak()
{
Console.WriteLine("动物叫声");
}
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("汪汪");
}
}
public class Cat : Animal
{
public override void Speak()
{
Console.WriteLine("喵喵");
}
}
public class Program
{
public static void Main(string[] args)
{
dynamic animal = new Dog();
// 不需要转换,可以直接调用 dynamic 变量的成员
animal.Speak(); // 输出:汪汪
Dog dog = animal as Dog;
if (dog != null)
{
Console.WriteLine(dog.GetType().Name);
}
}
}

总结:

  • object 类型是一种通用类型,可以用于存储任何类型的值。
  • dynamic 动态类型是一种延迟类型检查的类型,可以在运行时根据实际情况进行类型转换。
  • 两者各有优劣,应根据具体需求选择使用哪种类型。

此外,还有一些需要注意的地方:

  • 使用 dynamic 动态类型可能会导致性能下降,因为需要在运行时进行类型检查。
  • 在使用 dynamic 动态类型时,应注意类型安全问题,避免出现空引用异常等错误。

建议:

  • 在需要通用类型转换时,使用 object 类型。
  • 在需要延迟类型检查或动态语言互操作时,使用 dynamic 动态类型。
  • 在使用 dynamic 动态类型时,应注意性能和类型安全问题。
posted @   甜饼怪2030  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示