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还是可以小试的。
  • 相关阅读:
    【转】浅谈MVC与三层架构
    【转】小结登录的几种交互方式
    【转】 App架构设计经验谈:接口的设计
    【转】JS编码解码、C#编码解码
    jQuery 判断是否包含某个属性
    jQuery on()方法
    常用正则表达式大全
    Fiddler 抓取手机APP数据包
    [Asp.net]通过uploadify将文件上传到B服务器的共享文件夹中
    ★电车难题的n个坑爹变种
  • 原文地址:https://www.cnblogs.com/RuiLei/p/676182.html
Copyright © 2011-2022 走看看