当前位置: 首页 > 编程语言 > C#

确定类型是否为静态分享

时间:2023-04-10 16:19:59 C#

C#学习教程:判断一个类型是否为静态我正在尝试确定我是否可以使用我的类型执行此操作(实际上并非针对每种类型):如果类型是System.Windows.Point那么我可以这样做:Pointpoint1=newPoint();但是,如果类型是System.Environment那么这将不会运行:Environmentenvironment1=newEnvironment();//错误因此,如果我遍历程序集中的每个可见类型,我如何才能跳过所有无法创建第二个实例的类型?我对反射还很陌生,所以我的术语还不是很好。希望我在这里要做的很清楚。静态类在IL级别被声明为抽象和密封的。因此,您可以检查IsAbstract属性,IsAbstract处理抽象类和静态类(针对您的用例)。但是,抽象类并不是唯一不能直接实例化的类型。您应该检查接口的类型(没有CoClass属性)并且调用代码没有可访问的构造函数。type.IsAbstract&&type.IsSealed这对C#来说已经足够了,因为抽象类在C#中不能是密封的或静态的。但是,在处理来自其他语言的CLR类型时需要小心。您可以像这样搜索公共结构,类型t=typeof(Environment);varc=t.GetConstructors(BindingFlags.Public);if(!t.IsAbstract&&c.Length>0){//你可以创建实例}或者,如果你只对无参数构造函数感兴趣,你可以使用Typet=typeof(Environment);varc=t.GetConstructor(Type.EmptyTypes);if(c!=null&&c.IsPublic&&!t.IsAbstract){//你可以创建实例}Typet=typeof(System.GC);Console.WriteLine(t.Attributes);类型属性attribForStaticClass=类型属性.AutoLayout|类型属性.AnsiClass|类型属性.Class|类型属性。公共|类型属性.摘要|类型属性。密封|TypeAttributes.BeforeFieldInit;Console.WriteLine((t.Attributes==attribForStaticClass));我想,这应该有效。这是一种获取程序集中所有类型的所有公共构造函数的方法。以上就是C#学习教程:判断类型是否为静态分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——varassembly=AppDomain.CurrentDomain.GetAssemblies()[0];//用于演示目的的第一个程序集vartypes=assembly.GetTypes();foreach(类型中的var类型){varconstructors=type.GetConstructors();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: