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类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程