 
                    
                
         
    
    
    
	
	
		
    
    
        
            
            
            
                
 1.泛型类: 通过这个类中的invokeMethod动态调用InvokeClass中的method.
1.泛型类: 通过这个类中的invokeMethod动态调用InvokeClass中的method.
 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 public sealed class DynamicLoadMethod<T> where T : class
 public sealed class DynamicLoadMethod<T> where T : class

 
     {
{
 private static object obj = new object();
        private static object obj = new object();
 private static T invokeMethod;
        private static T invokeMethod;

 public static T InvokeMethod
        public static T InvokeMethod

 
         {
{
 get
            get

 
             {
{
 lock (obj)
                lock (obj)

 
                 {
{
 if (invokeMethod == null)
                    if (invokeMethod == null)

 
                     {
{
 invokeMethod = typeof(T).InvokeMember(typeof(T).Name, BindingFlags.CreateInstance |
                        invokeMethod = typeof(T).InvokeMember(typeof(T).Name, BindingFlags.CreateInstance |
 BindingFlags.Instance |
                                                                          BindingFlags.Instance |
 BindingFlags.NonPublic |
                                                                          BindingFlags.NonPublic |
 BindingFlags.Public, null, null, null, null) as T;
                                                                          BindingFlags.Public, null, null, null, null) as T;
 }
                    }
 return invokeMethod;
                    return invokeMethod;
 }
                }
 }
            }
 }
        }
 }
    }


 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 2.被动态调用的方法Class
2.被动态调用的方法Class
 public class InvokeClass
 public class InvokeClass

 
     {
{
 private String Name;
        private String Name;

 public String Names
        public String Names

 
         {
{
 
            

 set
            set  { Name = value; }
{ Name = value; }
 }
        }
 public override string ToString()
        public override string ToString()

 
         {
{
 return Name;
            return Name;
 }
        }

 private Object[] values = new Object[]
        private Object[] values = new Object[]  { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

 public Object this[int index]
        public Object this[int index]

 
         {
{
 get
            get

 
             {
{
 return values[index];
                return values[index];
 }
            }
 set
            set

 
             {
{
 values[index] = value;
                values[index] = value;
 }
            }
 }
        }

 public Object Value
        public Object Value

 
         {
{
 get
            get

 
             {
{
 return "the value";
                return "the value";
 }
            }
 }
        }

 public InvokeClass()
        public InvokeClass()

 
         {
{
 Name = "initialName";
            Name = "initialName";
 }
        }

 int methodCalled = 0;
        int methodCalled = 0;

 public void AddUp()
        public void AddUp()

 
         {
{
 methodCalled++;
            methodCalled++;
 Console.WriteLine("AddUp Called {0} times", methodCalled);
            Console.WriteLine("AddUp Called {0} times", methodCalled);
 }
        }

 public void PrintTime()
        public void PrintTime()

 
         {
{
 Console.WriteLine(DateTime.Now);
            Console.WriteLine(DateTime.Now);
 }
        }

 public void Swap(ref int a, ref int b)
        public void Swap(ref int a, ref int b)

 
         {
{
 int x = a;
            int x = a;
 a = b;
            a = b;
 b = x;
            b = x;
 }
        }
 }
    }
 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

 3.调用方法
3.调用方法

 static void Main(string[] args)
        static void Main(string[] args)

 
         {
{
 Console.WriteLine(DynamicLoadMethod<InvokeClass>.InvokeMethod.Value as String);
            Console.WriteLine(DynamicLoadMethod<InvokeClass>.InvokeMethod.Value as String);
 DynamicLoadMethod<InvokeClass>.InvokeMethod.AddUp();
            DynamicLoadMethod<InvokeClass>.InvokeMethod.AddUp();
 DynamicLoadMethod<InvokeClass>.InvokeMethod.Names = "BrianLei Build";
            DynamicLoadMethod<InvokeClass>.InvokeMethod.Names = "BrianLei Build";
 Console.WriteLine(DynamicLoadMethod<InvokeClass>.InvokeMethod.ToString());
            Console.WriteLine(DynamicLoadMethod<InvokeClass>.InvokeMethod.ToString());
 }
        } 最后的话,简单测试了一下,Loop100百万次,
最后的话,简单测试了一下,Loop100百万次,
 直接调用方法,只花了20毫秒,
          直接调用方法,只花了20毫秒,
 而动态调用方法的话,花了12秒
         而动态调用方法的话,花了12秒
 所以大家知道怎么这个思路,就可以了。
所以大家知道怎么这个思路,就可以了。
 在web form 中最好不要使用。
在web form 中最好不要使用。
 在win form还是可以小试的。
在win form还是可以小试的。 
             
            posted @ 
2007-03-15 16:48 
RicoRui 
阅读(
672) 
评论() 
 
收藏 
举报