创建对静态类中一组方法的访问代理

简介:

tygtug@newsmth.net发文询问“能创建一个对静态类中的一组方法的访问代理吗?”

“某些类都有一组静态方法
现在想在运行时传入类名
根据类名决定执行相应的类的静态方法。
类似于指定一个类的变量似的。”

“涉及到对旧有代码的改造时的折中考虑,才会有这个需要的,不能把问题归于类的结构涉及
不合理而搪塞阿。”

偶写了一个实现Demo:

 1 using  System;
 2
 3 namespace  DelegateTest
 4 {
 5    class MainClass
 6    {
 7
 8        [STAThread]
 9        static void Main(string[] args)
10        {
11            WhoAmIDelegate d1=DelegateFactory.CreateWhoAmIDelegate("DelegateTest.ClassA");
12            WhoAmIDelegate d2=DelegateFactory.CreateWhoAmIDelegate("DelegateTest.ClassB");
13
14            Console.WriteLine(d1());
15            Console.WriteLine(d2());
16
17            long start,end;
18            int loops = 100000000;
19
20            start=DateTime.Now.Ticks;
21            for(int i=0;i<loops;i++)
22            {
23                ClassA.WhoAmI();
24            }

25            end = DateTime.Now.Ticks;
26            Console.WriteLine("{0}次直接调用ClassA.WhoAmI耗时:{1}ms",loops,(end-start)/10000);
27
28            start=DateTime.Now.Ticks;
29            for(int i=0;i<loops;i++)
30            {
31                d1();
32            }

33            end = DateTime.Now.Ticks;
34            Console.WriteLine("{0}次调用WhoAmIDelegate耗时:{1}ms",loops,(end-start)/10000);
35
36        }

37    }

38
39
40    public delegate string WhoAmIDelegate();
41
42
43    public class ClassA
44    {
45        //方法很丑陋,嘿嘿。为了性能测试方便嘛。
46        public static string WhoAmI()
47        {
48            return "ClassA";
49        }

50    }

51
52    public class ClassB
53    {
54        public static string WhoAmI()
55        {
56            return "ClassB";
57        }

58    }

59
60    public class DelegateFactory
61    {
62        public static WhoAmIDelegate CreateWhoAmIDelegate(string className)
63        {
64            return (WhoAmIDelegate)Delegate.CreateDelegate(Type.GetType("DelegateTest.WhoAmIDelegate"),Type.GetType(className),"WhoAmI");
65        }

66    }

67}

68


Debug下运行结果:
ClassA
ClassB
100000000次直接调用ClassA.WhoAmI耗时:961ms
100000000次调用WhoAmIDelegate耗时:3134ms

Release下运行结果:
ClassA
ClassB
100000000次直接调用ClassA.WhoAmI耗时:210ms
100000000次调用WhoAmIDelegate耗时:2964ms

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2005/08/09/211073.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
8月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
92 4
|
5月前
|
前端开发 开发者 数据格式
|
7月前
|
C++
友元是一种允许某些外部函数或类访问另一个类的成员的机制
友元是C++中的一个强大特性,它提供了一种机制来允许特定的外部函数或类访问私有和保护成员。正确使用友元可以增强程序的功能性和灵活性,但应谨慎使用以避免破坏封装性和增加代码的复杂度。在设计类和功能时,合理利用友元,可以使得C++程序更加有效和高效。
60 2
|
8月前
|
存储 Java
|
8月前
|
设计模式 缓存 安全
代理模式:解析对象间的间接访问与控制
代理模式:解析对象间的间接访问与控制
定义和声明的区别 以及 内部和外部函数
把建立存储空间的变量声明称定义; 不需要建立存储空间的声明称为声明; c为例, 在函数中出现的对变量的声明(除了用extern声明的以外)都是定义 在函数中对其他函数的声明不是函数的定义 详细见c程序设计-谭浩强 196-197页
76 0
|
缓存 IDE API
C#反射与特性(五):主类型成员操作
C#反射与特性(五):主类型成员操作
410 0
C#反射与特性(五):主类型成员操作
|
存储 索引 容器
数组的定义方式及访问
数组的定义方式及访问
125 0
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
|
存储 JavaScript 前端开发
访问对象的属性,你知道有哪些方法?
相信对象对于每个使用JavaScript的人来说都不陌生。访问对象的属性几乎日常开发每天都在用。下面我们一起探索下有哪些方式可以实现属性的访问。
213 0