zoukankan
html css js c++ java
利用反射动态调用类成员(泛型篇)
1
.泛型类: 通过这个类中的invokeMethod动态调用InvokeClass中的method.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
public
sealed
class
DynamicLoadMethod
<
T
>
where T :
class
{
private
static
object
obj
=
new
object
();
private
static
T invokeMethod;
public
static
T InvokeMethod
{
get
{
lock
(obj)
{
if
(invokeMethod
==
null
)
{
invokeMethod
=
typeof
(T).InvokeMember(
typeof
(T).Name, BindingFlags.CreateInstance
|
BindingFlags.Instance
|
BindingFlags.NonPublic
|
BindingFlags.Public,
null
,
null
,
null
,
null
)
as
T;
}
return
invokeMethod;
}
}
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
2
.被动态调用的方法Class
public
class
InvokeClass
{
private
String Name;
public
String Names
{
set
{ Name
=
value; }
}
public
override
string
ToString()
{
return
Name;
}
private
Object[] values
=
new
Object[]
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
}
;
public
Object
this
[
int
index]
{
get
{
return
values[index];
}
set
{
values[index]
=
value;
}
}
public
Object Value
{
get
{
return
"
the value
"
;
}
}
public
InvokeClass()
{
Name
=
"
initialName
"
;
}
int
methodCalled
=
0
;
public
void
AddUp()
{
methodCalled
++
;
Console.WriteLine(
"
AddUp Called {0} times
"
, methodCalled);
}
public
void
PrintTime()
{
Console.WriteLine(DateTime.Now);
}
public
void
Swap(
ref
int
a,
ref
int
b)
{
int
x
=
a;
a
=
b;
b
=
x;
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
3
.调用方法
static
void
Main(
string
[] args)
{
Console.WriteLine(DynamicLoadMethod
<
InvokeClass
>
.InvokeMethod.Value
as
String);
DynamicLoadMethod
<
InvokeClass
>
.InvokeMethod.AddUp();
DynamicLoadMethod
<
InvokeClass
>
.InvokeMethod.Names
=
"
BrianLei Build
"
;
Console.WriteLine(DynamicLoadMethod
<
InvokeClass
>
.InvokeMethod.ToString());
}
最后的话,简单测试了一下,Loop100百万次,
直接调用方法,只花了20毫秒,
而动态调用方法的话,花了12秒
所以大家知道怎么这个思路,就可以了。
在web form 中最好不要使用。
在win form还是可以小试的。
查看全文
相关阅读:
UIWebView
Do not access Object.prototype method 'hasOwnProperty' from target object.eslintno-prototype-builtins
TypeError: ### is null,空指针导致的报错
antd里面的Table渲染多出来数据问题
VSCode保存时代码格式化
前端GIT规范
实现简单的数组去重?
提取对象数组的公共元素
Git常用面试知识点
taro自定义导航标题(可根据路由参数或者接口返回字段定义页面导航标题)
原文地址:https://www.cnblogs.com/RuiLei/p/676182.html
最新文章
iOS 网络请求 NSURLSession
iOS 侧滑按钮的实现
iOS的CocoaPods手动挡到自动导入第三方框架
iOS 五种传值方式
UINavigationController改变UINavigationBar导航条标题颜色跟字体
iOS GDataXMLNode的配置步骤
iOS UICollectionView 的简单显示
iOS UIXMLParser 解析数据
iOS UILabel 自适应文字的大小
数据库基本语句大全
热门文章
UIWebView显示网页
自定义类的归档解挡操作
SVN
iOS 谓词 NSPredicate 对字典NSDictionary的筛选
iOS 中文字符判断 正则NSRegularExpression 谓词NSPredicate 和 NSRange
iOS开发-正则表达式3种形式
iOS 一招搞定去掉字符串开始的0,尤其是针对时间格式化
iOS之tabbar图片去除渲染以及字体颜色统一配置
iOS的CocoaPods(activesupport requires Ruby version >= 2.2.2)
Xcode如何简单安装Alcatraz
Copyright © 2011-2022 走看看