C# 反射 GetMethods,不想获取父类任何方法,怎么做

C# 反射 GetMethods,不想获取父类任何方法,怎么做,第1张

Type t= objGetType();

tGetMethods(SystemReflectionBindingFlagsDeclaredOnly);

如果只想获得public的非父类的方法,可以这样做:

Type t= objGetType();

tGetMethods(SystemReflectionBindingFlagsDeclaredOnly

|SystemReflectionBindingFlagsPublic);

Class cls = ClassforName("comqfedua_reflectPerson");

Method[] allPublicMethods = clsgetMethods();

for (Method method : allPublicMethods) {

Systemoutprintln(method);

}

//暴力反射

//能够获取Person里面的private方法, 并且能够过滤掉从父类继承而来的方法

Method[] allMethods = clsgetDeclaredMethods();

for (Method method : allMethods) {

Systemoutprintln(method);

}

invoke(Object obj, Object args);

Object obj 这是底层调用该方法的类对象

the object the underlying method is invoked from

Object args 不定参数,是执行该放的参数列表,是Object类型

args is arguments used for method call

//向利用反射,创建一个当前类的对那个

Person p = (Person) clsgetConstructor(intclass, Stringclass)

newInstance(1, "狗蛋");

//获取一个指定的方法,需要的参数是方法的名字字符串和参数列表,

Method aPublicMethod = clsgetMethod("sleep", intclass);

Systemoutprintln("49" + aPublicMethod);

aPublicMethodinvoke(p, 15);

//获取一个静态方法

Method aPublicStaticMethod = clsgetMethod("eat", null);

aPublicStaticMethodinvoke(null, null);

//利用暴力反射获取一个私有化的成员方法

Method aPrivateMethod = clsgetDeclaredMethod("testPrivate", null);

aPrivateMethodsetAccessible(true);

aPrivateMethodinvoke(p, null);

object obj = (bGetType())GetProperty("a)GetValue(b, null);

if(obj != null && obj is A)

{

A aObj = obj as A;

int result = intParse((aObjGetType())

GetProperty("memberId")GetValue(aObjnull)ToString());

}

(bGetType())GetProperty("memberId")GetValue(b, null)//这个获取memberId的值就为null了。。。

因为对象b没有名字为memberId的属性

(bGetType())GetProperty("amemberId")GetValue(b, null)//这样也为null了。。。

原因同上没有名字为amemberId的属性

第一种:通过forName()方法;

第二种:类class;

第三种:对象getClass()。

举例如下:

package

test;

public class Demo{

public static void

main(){

Class<> c1 = null;

Class<> c2 =

null;

Class<> c3 =

null;

//三种反射用实例化方式

try{

//最常用的一种形式

c1 =

ClassforName("testX");

}catch(ClassNotFoundException

e){

eprintStackTrace();

}

//通过Object类中的方法实例化

c2

= new X()getClass();

//通过类class实例化

c3 =

Xclass;

Systemoutprintln("类名:" + c1getName());

//得到类名

Systemoutprintln("类名:" + c2getName());

//得到类名

Systemoutprintln("类名:" + c3getName());

//得到类名

}

}

Fruit fruit = new Apple();

首先这句话中,你通过new关键字实例化的是Apple的对象,由于Fruit是Apple的父类,因此Fruit类型的引用可以指向Apple类型的对象,并不意味着fruit变量是Fruit类型的对象。

因此,fruitgetClass()getName()的打印结果应该是Apple,我自己也是工作没两年,这块我没记错应该是Java多态性的内容,再回头看看吧。

以上就是关于C# 反射 GetMethods,不想获取父类任何方法,怎么做全部的内容,包括:C# 反射 GetMethods,不想获取父类任何方法,怎么做、反射(方法)、如何通过反编译通过父类获取子类属性值。给了吊毛,浪费分了,重发。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9353389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存