1.必备知识点-反射知识小补充
1.1 知识点
反射知识回顾
反射3剑客—— 1T 两 A
- Type —— 用于获取类的所有信息,包括字段、属性、方法等等
- Assembly —— 用于获取程序集,通过程序集获取Type
- Activator —— 用于快速实例化对象
Type.IsAssignableFrom方法 判断能否父类装子类
Type 类中的 IsAssignableFrom 方法用于确定一个类型是否可以从另一个类型赋值。它返回一个布尔值,指示调用类型是否可以从指定的类型派生或分配。
这个方法通常用于反射和类型比较的场景中。例如,你可以使用 IsAssignableFrom 来检查一个对象是否可以转换为另一个类型,或者确定一个类型是否是另一个类型的子类或接口的实现类。
Type fatherType = typeof(Father);
Type sonType = typeof(Son);
// 确定指定类型 sonType 的实例是否能分配给当前类型的变量。
if (fatherType.IsAssignableFrom(sonType))
{
print("可以装");
Father f = Activator.CreateInstance(sonType) as Father;
print(f);
}
else
{
print("不能装");
}
Type.GetGenericArguments方法 获取表示泛型类型参数的 Type 对象数组
Type 类中的 GetGenericArguments 方法用于获取表示泛型类型参数的 Type 对象数组。这个方法通常用于处理泛型类型,其中一个类型可能包含一个或多个类型参数。
该方法返回一个 Type 数组,其中包含表示泛型类型参数的 Type 对象。
// 获得List的Type类
List<int> list = new List<int>();
Type listType = list.GetType();
// 获得List泛型参数数组的Type
Type[] types = listType.GetGenericArguments();
print(types[0]); // System.Int32
// 获得Dictionary的Type类
Dictionary<string, float> dic = new Dictionary<string, float>();
Type dicType = dic.GetType();
// 获得Dictionary泛型参数数组的Type
types = dicType.GetGenericArguments();
print(types[0]); // System.String
print(types[1]); // System.Single
1.2 知识点代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Father
{
}
public class Son : Father
{
}
public class Lesson01_必备知识点_反射知识小补充 : MonoBehaviour
{
void Start()
{
#region 知识点一 反射知识回顾
//反射3剑客—— 1T 两 A
//Type —— 用于获取 类的所有信息 字段 属性 方法 等等
//Assembly —— 用于获取程序集 通过程序集获取Type
//Activator —— 用于快速实例化对象
#endregion
#region 知识点二 判断一个类型的对象是否可以让另一个类型为自己分配空间
//父类装子类 是否可以从某一个类型的对象 为自己 分配 空间
//获得父类和子类的Type
Type fatherType = typeof(Father);
Type sonType = typeof(Son);
//IsAssignableFrom方法 调用者 通过该方法进行判断 判断是否可以通过传入的类型为自己 分配空间
//确定指定类型 c 的实例是否能分配给当前类型的变量。
if (fatherType.IsAssignableFrom(sonType))
{
print("可以装");
Father f = Activator.CreateInstance(sonType) as Father;
print(f);
}
else
{
print("不能装");
}
#endregion
#region 知识点三 通过反射获取泛型类型
//GetGenericArguments方法 返回泛型参数数组的Type
//返回表示封闭式泛型类型的类型参数或泛型类型定义的类型参数的 Type 对象的数组。
//获得List的Type类
List<int> list = new List<int>();
Type listType = list.GetType();
//获得List泛型参数数组的Type
Type[] types = listType.GetGenericArguments();
print(types[0]);//System.Int32
//获得Dictionary的Type类
Dictionary<string, float> dic = new Dictionary<string, float>();
Type dicType = dic.GetType();
//获得Dictionary泛型参数数组的Type
types = dicType.GetGenericArguments();
print(types[0]);//System.String
print(types[1]);//System.Single
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com