C#Type类字段问题

问题描述

这是我在msdn上看到的:usingSystem;usingSystem.Reflection;usingSystem.Security;publicclassMyFilterAttributeSample{publicstaticvoidMain(){try{MemberFiltermyFilter=Type.FilterAttribute;TypemyType=typeof(System.String);MemberInfo[]myMemberInfoArray=myType.FindMembers(MemberTypes.Constructor|MemberTypes.Method,BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance,myFilter,MethodAttributes.SpecialName);foreach(MemberInfomyMemberinfoinmyMemberInfoArray){Console.Write("n"+myMemberinfo.Name);Console.Write("isa"+myMemberinfo.MemberType.ToString());}}catch(ArgumentNullExceptione){Console.Write("ArgumentNullException:"+e.Message);}catch(SecurityExceptione){Console.Write("SecurityException:"+e.Message);}catch(Exceptione){Console.Write("Exception:"+e.Message);}}}C++复制代码usingnamespaceSystem;usingnamespaceSystem::Collections;usingnamespaceSystem::Reflection;usingnamespaceSystem::Security;intmain(){try{MemberFilter^myFilter=Type::FilterAttribute;Type^myType=System::String::typeid;array<MemberInfo^>^myMemberInfoArray=myType->FindMembers(static_cast<MemberTypes>(MemberTypes::Constructor|MemberTypes::Method),static_cast<BindingFlags>(BindingFlags::Public|BindingFlags::Static|BindingFlags::Instance),myFilter,MethodAttributes::SpecialName);IEnumerator^myEnum=myMemberInfoArray->GetEnumerator();while(myEnum->MoveNext()){MemberInfo^myMemberinfo=safe_cast<MemberInfo^>(myEnum->Current);Console::Write("n{0}",myMemberinfo->Name);Console::Write("isa{0}",myMemberinfo->MemberType);}}catch(ArgumentNullException^e){Console::Write("ArgumentNullException:{0}",e->Message);}catch(SecurityException^e){Console::Write("SecurityException:{0}",e->Message);}catch(Exception^e){Console::Write("Exception:{0}",e->Message);}}请问“这个程序是怎么实现这句话的:示例获取FilterAttribute委托,将其作为参数传递给FindMembers方法,然后显示指定的成员和它们的属性。我对这句有些不明白能解释一下吗?谢谢

解决方案

解决方案二:
看一下这个例子usingSystem;usingSystem.Reflection;classMyFindMembersClass{publicstaticvoidMain(){ObjectobjTest=newObject();TypeobjType=objTest.GetType();MemberInfo[]arrayMemberInfo;try{//FindallstaticorpublicmethodsintheObjectclassthatmatchthespecifiedname.arrayMemberInfo=objType.FindMembers(MemberTypes.Method,BindingFlags.Public|BindingFlags.Static|BindingFlags.Instance,newMemberFilter(DelegateToSearchCriteria),"ReferenceEquals");for(intindex=0;index<arrayMemberInfo.Length;index++)Console.WriteLine("ResultofFindMembers-t"+arrayMemberInfo[index].ToString()+"n");}catch(Exceptione){Console.WriteLine("Exception:"+e.ToString());}}publicstaticboolDelegateToSearchCriteria(MemberInfoobjMemberInfo,ObjectobjSearch){//Comparethenameofthememberfunctionwiththefiltercriteria.if(objMemberInfo.Name.ToString()==objSearch.ToString())returntrue;elsereturnfalse;}}

时间: 2024-10-03 20:12:25

C#Type类字段问题的相关文章

[ASP.NET AJAX]Function对象及Type类的方法介绍

ajax|asp.net|对象 上一回我们从总体上认识了JavaScript Microsoft AJAX Library由于临时有事,没有加入事例显得有点抽象,这一回一定会通过一些事例更加直观的来会一会Asp.NET Ajax脚本库中一个很是重要的类Type.这个类提供了一些扩展面向对象编程的一些反射方法,通过这个类我们可以注册类似.NET中的一些(如:命名空间,类,枚举等等)基本类型.这个Type类继承自window是一个Global类型,不属于任何命名空间.下面我们来看看Type中的一些基

c#扩展方法奇思妙用高级篇八:Type类扩展

Type 类提供了大量的属性和方法,但在一些基础性开发工作中,Type类功能还有些欠缺,尤其上在处理泛型类型时,如可空类型和泛型集合类型.下面的类就针对这些地方进行扩展. 1 public static class TypeHelper 2 { 3 public static bool IsNullableType(this Type type) 4 { 5 return (((type != null) && type.IsGenericType) && 6 (type.

[ASP.NET AJAX]Function对象及Type类的方法介绍_AJAX相关

上一回我们从总体上认识了JavaScript Microsoft AJAX Library由于临时有事,没有加入事例显得有点抽象,这一回一定会通过一些事例更加直观的来会一会Asp.NET Ajax脚本库中一个很是重要的类Type.这个类提供了一些扩展面向对象编程的一些反射方法,通过这个类我们可以注册类似.NET中的一些(如:命名空间,类,枚举等等)基本类型.这个Type类继承自window是一个Global类型,不属于任何命名空间.下面我们来看看Type中的一些基本方法以及是怎样实一些方法的实现

C#利用反射简化给类字段赋值

 这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的 然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值 1.类的定义 namespace CCB_Donet.ClassFolder { public class FieldRuleInfo { public string gStrFNo; public string gStrFName; public string gStrFLock; public string gStrFCaption; public strin

原生sql hibernate-用原生sql查询 为什么实体类中存在该字段,但为什么还是报错列名无效

问题描述 用原生sql查询 为什么实体类中存在该字段,但为什么还是报错列名无效 这是dao层 ds = HibernateDataSource.getHibernateDataSource(); session = ds.getSession(); String sql1="SELECT CHANNEL_ID FROM JC_CHANNEL WHERE PARENT_ID='"+ channelId + "'"; SQLQuery sqlQuery1 = sessi

SAP MM 物料主数据中MRP2 View中的Procurement Type字段值不能改?

SAP MM 物料主数据中MRP2 View中的Procurement Type字段值不能改? 当我们创建物料主数据的时候,选择好了物料类型后,在MRP2 视图中procurement  type字段值就自动确定为F了,并且该字段是灰色的,不能修改的,如下图:   D项目上物料主数据的设置,希望在创建物料主数据的时候,该字段值可以修改,比如改成X.  是故,在我试图去找相关的配置,看看这个procurement type字段值能不能改成可编辑状态.   1), 先去看物料类型ROH的字段选择,是

利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

(C#)利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

C#反射技术之读取和设置类的属性

要用C#反射技术的话,首先得引入System.Reflection 命名空间,这个命名空间里的类,具有动态加载程序集.类型,动态调用方法.设置和取得属性和字段的值.可以获取类型和方法的信息的功能. 要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法. 1 Class MyClass 2 { 3 private int field; 4 public int Field 5 { 6 get 7 { 8 return this.fi