摸索C中的隐秘方法调用-解锁外部或私有方法的秘密通道-深化探寻五种有目共睹的方法
在C#中,可以经常使用不同的方法调用外部或私有方法。上方区分引见经过反射、MethodInfo.CreateDelegate、表白式(树)、灵活方法(call)、灵活方法(calli)这五种方法。
1.经过反射方法
经常使用反射可以访问和调用外部或私有方法。
usingSystem;usingSystem.Reflection;publicclassMyClass{privatevoidMyPrivateMethod(){Console.WriteLine("调用了私有方法");}}classProgram{staticvoidMn(){MyClassmyObject=newMyClass();//经过反射失掉私有方法MethodInfomethodInfo=typeof(MyClass).GetMethod("MyPrivateMethod",BindingFlags.NonPublic|BindingFlags.Instance);//调用私有方法methodInfo.Invoke(myObject,null);}}
2.经常使用MethodInfo.CreateDelegate方法
经过MethodInfo.CreateDelegate方法可以创立委托,而后调用私有方法。
usingSystem;usingSystem.Reflection;publicclassMyClass{privatevoidMyPrivateMethod(){Console.WriteLine("调用了私有方法");}}classProgram{staticvoidMain(){MyClassmyObject=newMyClass();//经过反射失掉私有方法MethodInfomethodInfo=typeof(MyClass).GetMethod("MyPrivateMethod",BindingFlags.NonPublic|BindingFlags.Instance);//创立委托Actionaction=(Action)Delegate.CreateDelegate(typeof(Action),myObject,methodInfo);//调用私有方法action();}}
3.经常使用表白式(树)方法
经过表白式(树)可以创立灵活方法,而后调用私有方法。
usingSystem;usingSystem.Linq.Expressions;publicclassMyClass{privatevoidMyPrivateMethod(){Console.WriteLine("调用了私有方法");}}classProgram{staticvoidMain(){MyClassmyObject=newMyClass();//经常使用表白式创立灵活方法Actionaction=CreateDelegate<Action>(myObject,"MyPrivateMethod");//调用私有方法action();}//经常使用表白式创立灵活方法的通用方法staticTDelegateCreateDelegate<TDelegate>(objecttarget,stringmethodName){varmethodInfo=target.GetType().GetMethod(methodName,BindingFlags.NonPublic|BindingFlags.Instance);varparameter=Expression.Parameter(typeof(object),"instance");varcall=Expression.Call(Expression.Convert(parameter,target.GetType()),methodInfo);varlambda=Expression.Lambda<TDelegate>(call,parameter);returnlambda.Compile();}}
4.经常使用灵活方法(call)方法
经常使用灵活方法可以调用私有方法。
usingSystem;usingSystem.Reflection;usingSystem.Reflection.Emit;publicclassMyClass{privatevoidMyPrivateMethod(){Console.WriteLine("调用了私有方法");}}classProgram{staticvoidMain(){MyClassmyObject=newMyClass();//经常使用灵活方法调用私有方法CallPrivateMethod(myObject,"MyPrivateMethod");}//经常使用灵活方法调用私有方法的通用方法staticvoidCallPrivateMethod(objecttarget,stringmethodName){varmethodInfo=target.GetType().GetMethod(methodName,BindingFlags.NonPublic|BindingFlags.Instance);//经常使用灵活方法vardynamicMethod=newDynamicMethod("CallMethod",null,new[]{typeof(object)},target.GetType());varilGenerator=dynamicMethod.GetILGenerator();ilGenerator.Emit(OpCodes.Ldarg_0);//加载第一个参数,即指标实例ilGenerator.EmitCall(OpCodes.Call,methodInfo,null);//调用私有方法ilGenerator.Emit(OpCodes.Ret);//前往varaction=(Action<object>)dynamicMethod.CreateDelegate(typeof(Action<object>));//调用私有方法action(target);}}
5.经常使用灵活方法(calli)方法
![C#](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
经常使用灵活方法(calli)可以调用私有方法。
usingSystem;usingSystem.Reflection.Emit;publicclassMyClass{privatevoidMyPrivateMethod(){Console.WriteLine("调用了私有方法");}}classProgram{staticvoidMain(){MyClassmyObject=newMyClass();//经常使用灵活方法(calli)调用私有方法CallPrivateMethod(myObject,"MyPrivateMethod");}//经常使用灵活方法(calli)调用私有方法的通用方法staticvoidCallPrivateMethod(objecttarget,stringmethodName){varmethodInfo=target.GetType().GetMethod(methodName,BindingFlags.NonPublic|BindingFlags.Instance);//经常使用灵活方法(calli)vardynamicMethod=newDynamicMethod("CallMethod",typeof(void),new[]{typeof(object)},target.GetType());varilGenerator=dynamicMethod.GetILGenerator();ilGenerator.Emit(OpCodes.Ldarg_0);//加载第一个参数,即指标实例ilGenerator.EmitCalli(OpCodes.Call,methodInfo.CallingConvention,methodInfo.ReturnType,methodInfo.GetParameters().Select(p=>p.ParameterType).ToArray(),null);//调用私有方法ilGenerator.Emit(OpCodes.Ret);//前往varaction=(Action<object>)dynamicMethod.CreateDelegate(typeof(Action<object>));//调用私有方法action(target);}}
以上五种方法都可以用于调用外部或私有方法,详细经常使用哪种方法取决于详细的场景和需求。
请大伙们帮个忙喔~~要5个句子(拟人,比喻,设问,排比等修辞手法),是六年级的哦~
比喻:2.阳光下盛开的百合花就是您的笑容。 3.皎洁的明月高挂在淡蓝色的天空中,月光像流水一样泻下来,大地一片银白色。 4.春风像个慈祥的母亲,拂着你的脸颊,使你感到舒畅,心旷神怡。 5.云彩像一朵朵洁白的羽毛,轻轻的飘浮在空中。 6.水仙花很漂亮,像一位站在小河边,穿着白衣服的仙女.拟人:白杨树像一位静默的少女,在月光下倾听着夏夜的故事。 天空好像生气了,他的愤怒使狂风暴雨不停的下着、刮着春天真是生机勃勃,它把正在争相斗艳的花朵染红了,也把大自然染绿了,更染绿了我们的心田苦难笑着对我说:“朋友 别倒下,站起来,你能行!”树叶儿那翩翩起舞的身姿在半空中摇曳回旋,绿色的脉络泛着梦幻般的光晕,娉婷婀娜;弧形的曲线带着一个轻巧的小把,俏皮可爱。 排比: 2.痛苦—— 痛苦是黑暗中的摸索,前进的路途中满是坎坷;痛苦是无人理解的悲哀,无助的面对一切挫折;痛苦是心灵最深的折磨,无泪且无法直言;痛苦是天生没有的表情,是烦恼中的恶魔。 3.愚蠢—— 愚蠢是一种天生的无奈,是一种后天的懒惰,是一颗自己种下的恶果,是一条好果实中的蛀虫。 4.谎言—— 谎言是一只心灵的蛀虫,将人的心蛀得面目全非;谎言是一个深深的泥潭,让人深陷其中无法自拔;谎言是一个无尽的黑洞,让人坠入罪恶的深渊万劫不复。 5.阴险—— 阴险,是一条披着羊皮的狼,干着不见天日的勾当;阴险是善良的公敌,嫉妒的朋友;阴险是一座心灵的冰山,让人透过清澈感到的是阵阵的寒意。 6.自私—— 自私是一面镜子,镜子里永远只看得到自己;自私是一块布匹,蒙住了自己的眼睛,看不见别人的痛楚;自私是一层玻璃,看上去透明,却始终隔开了彼此的距离。 夸张1、大虫见掀他不着,吼一声,就像半天里起了个霹雳,震得那山冈也动了。 ——《景阳冈》 2、柏油路晒化了,甚至铺户门前的铜牌好像也要晒化。 3、她还没有端酒怀,就醉了。 4、当破碎的心凝结了凝结,沉淀成沉淀,磨灭掉磨灭,才发现岁月早就划破我的脸,而时间他对我谄笑,那么耀眼,那么妖冶,忽而发现,自己离曾经的那天,那么遥远…… 5、班里静的,连针掉都能听见. 设问什么叫自律?自律就是自己管束自己的行为。 这人是谁?不是别人,原来是大明。 学好语文要背书吗?一定要! 这瓶饮料是谁买来的?原来是妈妈买来的。 是什么是合作?合作是互相配合 反问1、 字典难道不是我们的良师益友吗?2、难道那条街不热闹吗?3、 难道打仗就是为了多杀人吗? 4、毒刑拷打算得了什么?死亡也无法叫我开口。 5、实现四个现代化,难道不是全国人民的伟大历史任务吗?
怎样解决“此选项卡已经恢复 此网页上的问题导致Internet Explorer关闭并重新打开该选项卡。”
登录专利电子申请网,用【证书登录】时,偶尔会遇到这个问题:此网页出现问题,导致Internet Explorer关闭了该标签页。 导致无法登录系统,无法办理专利事务。 关于这个问题的解决方法,你可以参考《证书登录遇到网页出现问题,IE关闭该标签页这个问题的解决方案》。 它这里是专门为专利电子申请网登录而提供的解决方案,很管用。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。