求助:如何用C# Reflection测试.NET String类的各类元数据信息
嘿,我太懂你折腾反射测试string类时的挫败感了——刚啃了20天反射、特性这些概念,上手实操就踩坑,换谁都头大!我给你一套能直接跑通的完整代码,把你要的所有信息都拉出来,顺便拆解每个环节的逻辑,帮你搞懂之前可能卡壳的地方。
完整可运行代码
using System; using System.Reflection; class StringReflectionDemo { static void Main() { // 获取string类型的Type对象,两种写法都靠谱,typeof更直接安全 Type stringType = typeof(string); // 也可以用实例获取:Type stringType = "随便写点啥".GetType(); // 1. 基础信息:类名 + 命名空间 Console.WriteLine($"类名: {stringType.Name}"); Console.WriteLine($"命名空间: {stringType.Namespace}"); // 2. 所在程序集 Assembly assembly = stringType.Assembly; Console.WriteLine($"所在程序集: {assembly.FullName}"); // 3. 父类(直接基类) Type baseType = stringType.BaseType; Console.WriteLine($"父类: {baseType?.Name ?? "无基类"}"); // 4. 实现的所有接口(包括继承来的) Console.WriteLine("\n实现的接口列表:"); Type[] interfaces = stringType.GetInterfaces(); foreach (Type iface in interfaces) { Console.WriteLine($"- {iface.Name}"); } // 5. 类型特性判断:抽象/泛型/密封 Console.WriteLine("\n类型特性:"); Console.WriteLine($"是否抽象类: {stringType.IsAbstract}"); Console.WriteLine($"是否泛型类型: {stringType.IsGenericType}"); Console.WriteLine($"是否密封类: {stringType.IsSealed}"); } }
关键环节拆解(帮你避坑)
- 获取Type对象:用
typeof(string)是最稳妥的方式,不需要实例就能拿到类型信息;如果用实例的GetType(),要注意不能用null(比如((string)null).GetType()会直接抛空引用异常)。 - 程序集信息:
string在.NET Framework里属于mscorlib.dll,在.NET Core/.NET 5+里属于System.Private.CoreLib.dll,代码里用Assembly.FullName会输出完整的程序集标识(包含版本、公钥令牌等)。 - 接口遍历:
GetInterfaces()会返回所有实现的接口,包括从父类继承来的(比如string实现了IEnumerable<char>、IComparable<string>等一堆接口),直接遍历输出就行。 - 类型特性判断:
IsSealed:string是密封类,所以会返回true(这也是为啥你不能继承string的原因);IsAbstract和IsGenericType:string既不是抽象类也不是泛型类型,所以都是false。
之前你出错可能是没注意这些细节——比如是不是漏引用了System.Reflection命名空间?或者尝试用了错误的方法获取类型信息?把上面的代码跑一遍,应该就能得到你想要的所有结果了!
内容的提问来源于stack exchange,提问作者ravenousHydra
相关产品推荐
相关产品推荐

