C# Type类
2022/7/10 14:23:38
本文主要是介绍C# Type类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
System.Type类它实际上是一个抽象类
C#中可以通过Type类访问任意数据类型的信息
一般获取数据类型的Type引用有以下几种方式:
- 使用typeof运算符:Type type1 = typeof(int); 注:这个运算符的参数是类型的名称(不能放在引号中)。
- 使用GetType()方法,所有的类都会从System.Object继承这个方法。如下实例
int i = 6; Type type1 = i.GetType();
注:只能用变量直接调用GetType()方法,而不是把类型的名称作为其参数。但是注意,返回的Type对象仍然只与该数据类型相关:它不包含与该类型的实例相关的任何信息。如果引用了一个对象,但是不能确保对象实际上是那个类的实例,GetType方法就很有用。
- 通过调用Type类的静态方法GetType():
Type type1 = Type.GetType("System.Int32");
1.Type的属性
- Name:是获取数据类型名称(如:使用的是类就获取类的名称、使用的是int就获取“Int32”),即只能获取类的名称。(返回值)
- FullName:获取数据类型的完全限定名(包括名称空间名、即:命名空间名称),即同时获取类的命名空间+类名的完全限定名称。(返回值)
- Namespace:只能获取数据类的命名空间名称。(返回值)
- BaseType:获取该Type的直接基本类型(返回对应的Type引用)
- UnderlyingSystemType:该Type中映射到的类型。这个只能在完整框架中使用(返回对应的Type引用)
- 示例代码如下:
static void Main(string[] args) { Console.WriteLine("***********************Type属性使用***********************"); int i = 42; Type type = i.GetType(); Console.WriteLine(type); Console.WriteLine("***********************Type属性返回的是对应的值***********************"); string type1 = i.GetType().Name; Console.WriteLine("类型名称:" + type1); string type2 = i.GetType().FullName; Console.WriteLine("类型名称的完全限定名(包括命名空间):" + type2); string type3 = i.GetType().Namespace; Console.WriteLine("在其中使用数据类型的名称空间名:" + type3); Console.WriteLine("***********************Type属性返回的是对应的Type引用***********************"); Type tp1 = i.GetType().BaseType; Console.WriteLine(tp1); Type tp2 = i.GetType().UnderlyingSystemType; Console.WriteLine(tp2); Console.WriteLine("***********************Type属性返回值为布尔的***********************"); Type intType = typeof(int); Console.WriteLine(intType.IsAbstract);// 是否为抽象 Console.WriteLine(intType.IsArray);//是否为数组 Console.WriteLine(intType.IsClass);//是否为类或委托 Console.WriteLine(intType.IsEnum);//是否为枚举 Console.WriteLine(intType.IsInterface);//是否为接口 Console.WriteLine(intType.IsPointer);//是否为指针 Console.WriteLine(intType.IsPrimitive);//是否为基元素类型 Console.WriteLine(intType.IsPublic);//是否声明为公共的 Console.WriteLine(intType.IsSealed);//是否声明为密封的 Console.WriteLine(intType.IsValueType);//是否为值类型 Console.Read(); }
2.方法
在使用Type的方法时必须先引用“using System.Reflection;”
System.Type的大多数方法都用于获取对应数据的成员信息:构造函数、属性、方法和事件:
示例中使用的类:
class Student { public int Id { get; set; } public string Name { get; set; } public int Age; public DateTime Birthday; private string Address; public Student() { } public Student(int id) { this.Id = id; } public Student(string name) { this.Name = name; } public Student(int id, string name) { this.Id = id; this.Name = name; } public void Motion() { Console.WriteLine($"{this.Name}在运动"); } public void Motion(int id) { Console.WriteLine("调用有一个参数的方法"); } public void Motions(int id) { Console.WriteLine("调用有一个参数的方法"); } }
- 获取类型中的构造函数:GetConstructor()、GetConstructors()
static void Main(string[] args) { Type type = typeof(Student); Console.WriteLine("***********************获取单个构造函数开始*************************"); Console.WriteLine("***********************获取没有参数的构造函数格式***********************"); ConstructorInfo info = type.GetConstructor(new Type[0]); Console.WriteLine(info); ConstructorInfo info1 = type.GetConstructor(Type.EmptyTypes); Console.WriteLine(info1); ConstructorInfo info2 = type.GetConstructor(new Type[] { }); Console.WriteLine(info2); Console.WriteLine("***********************获取有参数的构造函数格式***********************"); ConstructorInfo info3 = type.GetConstructor(new Type[] { typeof(int) }); Console.WriteLine(info3); ConstructorInfo info4 = type.GetConstructor(new Type[1] { typeof(string) }); Console.WriteLine(info4); ConstructorInfo info5= type.GetConstructor(new Type[2] { typeof(string),typeof(int) });//当传入的参数类型和构造函数的数据类型不一致不会报错 Console.WriteLine(info5); ConstructorInfo info6 = type.GetConstructor(new Type[] { typeof(int), typeof(string) });//参数类型必须一致 Console.WriteLine(info6); Console.WriteLine("***********************获取单个构造函数结束***********************"); Console.WriteLine(); Console.WriteLine("***********************获取所有的构造函数集合***********************"); foreach (var con in type.GetConstructors()) { Console.WriteLine(con); } Console.WriteLine("***********************获取根据传入的参数获取指定的构造函数集合***********************"); foreach (var item in type.GetConstructors(BindingFlags.Instance | BindingFlags.Public)) { Console.WriteLine(item); } Console.Read(); }
- 获取类型中的事件:GetEvent()、GetEvents()
static void Main(string[] args) { Console.WriteLine("***********************获取窗体中的按钮事件*************************"); Type type = typeof(System.Windows.Forms.Button); Console.WriteLine("***********************获取窗体中的Click按钮事件*************************"); EventInfo gs = type.GetEvent("Click"); Console.WriteLine(gs); Console.WriteLine(); Console.WriteLine("***********************获取窗体中所有的按钮事件集合*************************"); foreach (var btn in type.GetEvents()) { Console.WriteLine(btn); } Console.WriteLine("***********************获取窗体中的指定条件的按钮事件集合*************************"); foreach (var item in type.GetEvents(BindingFlags.Instance | BindingFlags.Public)) { Console.WriteLine(item); } Console.ReadKey(); }
- 获取类型中的字段:GetField()、GetFields()
static void Main(string[] args) { Console.WriteLine("***********************获取类型中的字段*************************"); Type type = new Student().GetType(); Console.WriteLine("***********************获取类型中指定的字段*************************"); FieldInfo info = type.GetField("Age"); Console.WriteLine(info); Console.WriteLine(); Console.WriteLine("***********************获取类型中的字段集合*************************"); foreach (var item in type.GetFields()) { Console.WriteLine(item); } Console.ReadKey(); }
- 获取类型中方法:GetMethod()、GetMethods()
static void Main(string[] args) { Type type = new Student().GetType(); Console.WriteLine("***********************获取类型中指定的方法*************************"); MethodInfo info = type.GetMethod("Motion", Type.EmptyTypes); Console.WriteLine(info); MethodInfo info1 = type.GetMethod("Motion", new Type[0]); Console.WriteLine(info1); MethodInfo info2 = type.GetMethod("Motion", new Type[] { }); Console.WriteLine(info2); MethodInfo info3 = type.GetMethod("Motion", new Type[1] { typeof(int) }); Console.WriteLine(info3); MethodInfo info4 = type.GetMethod("Motions", new Type[] { typeof(int) }); Console.WriteLine(info4); Console.WriteLine(); Console.WriteLine("***********************获取类型中所有的方法集合*************************"); foreach (var item in type.GetMethods()) { Console.WriteLine(item); } Console.ReadKey(); }
- 获取类型中公共成员:GetMember()、GetMembers()
static void Main(string[] args) { Type type = new Student().GetType(); Console.WriteLine("***********************获取类型中指定的公共成员*************************"); foreach (var item in type.GetMember("Motion")) { Console.WriteLine(item); } Console.WriteLine(); Console.WriteLine("***********************获取类型中所有的公共成员*************************"); foreach (var item in type.GetMembers()) { Console.WriteLine(item); } Console.ReadKey(); }
- 获取类型中的属性:GetProperty()、GetProperties()
static void Main(string[] args) { Type type = new Student().GetType(); Console.WriteLine("***********************获取类型中指定的属性法*************************"); PropertyInfo info = type.GetProperty("Id"); Console.WriteLine(info); Console.WriteLine("***********************获取类型中所有的属性集合*************************"); foreach (var item in type.GetProperties()) { Console.WriteLine(item); } Console.ReadKey(); }
搜索
复制
这篇关于C# Type类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#