C#如何通过反射实列化,再转换成其类型
时间: 2023-07-15 19:10:55 浏览: 59
可以使用反射中的`Activator.CreateInstance`方法来实例化一个对象,然后使用`as`操作符将其转换为其类型。以下是一个示例代码:
```csharp
using System;
class ExampleClass {
public int x;
public ExampleClass() {
x = 42;
}
}
class Program {
static void Main(string[] args) {
Type type = typeof(ExampleClass);
object obj = Activator.CreateInstance(type);
ExampleClass example = obj as ExampleClass;
if (example != null) {
Console.WriteLine(example.x);
}
}
}
```
该示例代码中,我们首先获取了类型`ExampleClass`的`Type`对象,然后使用`Activator.CreateInstance`方法创建了一个该类型的新实例。最后,我们将其转换为`ExampleClass`类型,并访问其中的字段。注意,我们使用了`as`操作符来转换,这种方法可以避免`InvalidCastException`异常。
相关问题
C#通过反射实列化后,再如何通过类名将实列类型转换成对应的类型
可以使用强制类型转换将实例类型转换为对应类型。例如,假设我们有一个对象 obj,它是一个通过反射创建的类的实例:
```C#
object obj = Activator.CreateInstance(Type.GetType("Namespace.ClassName"));
```
这时候我们可以使用强制类型转换将其转换为对应的类型。例如,如果 ClassName 对应的类型是 MyType,我们可以这样转换:
```C#
MyType myObject = (MyType)obj;
```
这样就将 obj 转换为了 MyType 类型的对象 myObject。需要注意的是,如果 obj 实际上不是 MyType 类型的对象,那么这个转换将会失败并抛出异常。因此,在进行类型转换之前,最好先使用 is 运算符判断 obj 是否是目标类型的对象,例如:
```C#
if (obj is MyType)
{
MyType myObject = (MyType)obj;
// ...
}
else
{
// 处理类型不匹配的情况
}
```
C#如何通过反射实列化,再如何通过类名转换成其类型
通过反射实例化一个对象,可以通过以下方式:
1. 获取类型对象:使用 Type 类型的静态方法 `Type.GetType(string typeName)` 或者 `typeof` 运算符来获取类型对象。
2. 创建对象实例:使用 `Activator.CreateInstance(Type type)` 方法来创建对象实例。
下面是一个示例代码:
```csharp
string typeName = "NamespaceName.ClassName"; // 类型的完整名称,包括命名空间
Type type = Type.GetType(typeName); // 获取类型对象
object instance = Activator.CreateInstance(type); // 创建对象实例
```
如果要将类名字符串转换成对应的类型,可以使用 `Type.GetType(string typeName)` 方法来获取类型对象,例如:
```csharp
string typeName = "System.String";
Type type = Type.GetType(typeName);
```
如果类型名称包含在当前程序集中,则可以使用 typeof 运算符:
```csharp
Type type = typeof(System.String);
```