typeof,GetType

typeof:
是运算符,获得某一类型的 System.Type 对象。
Int32 t = new Int32();
Type t = typeof(int);

GetType:
是方法,获取当前实例的类型。
int i = 10;
Console.WriteLine(i.GetType());

区别:
GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用(初始化以后)
Typeof()的参数只能是int,string,String,自定义类型,且不能是实例

GetType() 和typeof()都返回System.Type的引用。

TypeOf() 和GetType()的区别:

(1)TypeOf():得到一个Class的Type

(2)GetType():得到一个Class的实例的Type

转载于:https://www.cnblogs.com/bb-love-dd/p/6043647.html

在 C# 中,`typeof` 是一个用于获取类型元数据的关键字。它主要用于在运行时获取类型的 `Type` 对象,从而可以进一步分析类型的内部结构,例如类的属性、方法、字段、构造函数等。`typeof` 通常用于反射(Reflection)编程中,它为动态分析和操作类型提供了基础支持。 ### 获取类型元数据 `typeof` 的基本语法是 `typeof(TypeName)`,其中 `TypeName` 是要查询的类型名称。例如,获取一个类 `MyClass` 的 `Type` 对象可以使用以下代码: ```csharp Type type = typeof(MyClass); ``` 通过 `Type` 对象,可以访问类型的各种信息,例如: - 获取类的所有公共方法:`type.GetMethods()`。 - 获取类的所有公共属性:`type.GetProperties()`。 - 获取类的所有公共字段:`type.GetFields()`。 ### 动态分析类的结构 结合反射机制,`typeof` 可以用来动态分析类的内部结构。例如,可以通过以下代码列出一个类的所有方法: ```csharp Type type = typeof(MyClass); foreach (var method in type.GetMethods()) { Console.WriteLine(method.Name); } ``` 此功能在开发通用库或框架时非常有用,因为它允许在运行时动态地检查和操作类型。 ### 使用场景 `typeof` 的典型使用场景包括但不限于: 1. **依赖注入**:通过反射动态创建对象实例。 2. **序列化与反序列化**:动态分析对象的属性以进行数据转换。 3. **插件系统**:加载外部程序集并动态调用其功能。 4. **日志记录**:记录类型信息以进行调试或诊断。 ### 注意事项 尽管 `typeof` 提供了强大的功能,但在使用时需要注意以下几点: - `typeof` 只能作用于已知的类型名称,无法用于动态或匿名类型。 - 反射操作可能会带来性能开销,因此在性能敏感的代码段中应谨慎使用。 - 某些反射操作需要适当的权限,例如访问非公共成员时。 ### 示例代码 下面是一个完整的示例程序,展示了如何使用 `typeof` 获取类的内部结构: ```csharp using System; using System.Reflection; class MyClass { public void Method1() { } public int Property1 { get; set; } public int Field1; } class Program { static void Main() { Type type = typeof(MyClass); Console.WriteLine("Methods:"); foreach (var method in type.GetMethods()) { Console.WriteLine($"- {method.Name}"); } Console.WriteLine("\nProperties:"); foreach (var property in type.GetProperties()) { Console.WriteLine($"- {property.Name}"); } Console.WriteLine("\nFields:"); foreach (var field in type.GetFields()) { Console.WriteLine($"- {field.Name}"); } } } ``` ### 相关问题 1. C# 中如何使用反射动态创建对象实例? 2. `typeof` 和 `GetType()` 在 C# 中的区别是什么? 3. `typeof` 是否可以用于泛型类型?如何使用? 4. 如何通过反射访问类的私有成员? 5. 在 C# 中,`typeof` 的性能影响有哪些?如何优化? [^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值