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, 
    nullnullnullnullas 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[] 0123456789 };

            
    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还是可以小试的。
  • 相关阅读:
    WSDL2Java操作指南
    LVM 學習筆記 转载 
    TAR 的使用
    常用12种密码破解方法,一旦忘了密码可以补救,不要搞破坏
    ADAMS软件简介
    PPT演讲稿如何制作?
    window sp3第三方主题使用,改变主题,任务栏不变
    安装 Microsoft AppLocale 后出现的 Install Shield 安装界面乱码问题的解决办法
    K700C 港行的一般的设置,包括(GPRS上网设置,彩信设置,QQ设置等等)
    虚拟三维建模中的FSt格式文件介绍
  • 原文地址:https://www.cnblogs.com/RuiLei/p/676182.html
Copyright © 2011-2022 走看看