none
CreateInstance 相关的问题 RRS feed

  • 问题

  • 朋友们好 

    现在我在winform中用反射 然后呢,通过 CreateInstance 创建实例。

    我想这个实例是单例,所以是不是要判断一下是否已经产生过实例 ?

    求助,怎么办?


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……

    2012年12月16日 7:18

答案

  • 最简单的办法,创建私有构造函数进行实例化:

    public class A
    {
       private static A a = new A();
       private A()
       {
       }
       public static A GetA()
       {
          return a;
       }
    }

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月16日 7:33
    版主
  • 反射调用geta方法得到实例

    http://feiyun0112.cnblogs.com/

    2012年12月16日 13:44
    版主
  • 谢谢,是CreateInstance之后转化成相应类型之后,使用的时候,再geta再操作么?

    还有没有另外的办法呀。现在我是在学习抽象工厂模式,有没有办法在

    objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);

    这个之前 判断是否已经存在该实例呀?


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……

    引用抽象工厂的全部dll,然后创建一个“单例模式”的静态工厂,或者只有一个私有构造函数的工厂(可以仿造我的单例模式,用锁锁住):

    lock(obj)
    {
        if(objType==null)
        {
               lock(obj)
               {
                     objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);
               }
        }
    }

    或者静态类中静态构造函数直接初始化(无须判断,因为静态构造函数只调用一次)。

    具体可以参考设计模式中“单例模式”:


    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月17日 2:10
    版主
  • objType =Type.GetType(classfullname).InvokeMember("GetA", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, null);

    http://feiyun0112.cnblogs.com/

    2012年12月18日 2:05
    版主
  • 给你的对象工厂设置一个 Dictionary<sting,object> 成员,创建之前先按照类型名从字典里取,没有则反射创建新的,然后插入到字典中。你可以把工厂设置为单例模式,或者把字典设置为静态成员。
    2012年12月20日 5:21

全部回复

  • 最简单的办法,创建私有构造函数进行实例化:

    public class A
    {
       private static A a = new A();
       private A()
       {
       }
       public static A GetA()
       {
          return a;
       }
    }

    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月16日 7:33
    版主
  • 非常感谢,这样仅是单例的话,确实非常不错的

    只是,我现在是要在反射的时候用,不明白啊朋友,求助!朋友请再指点一下吧,我明白怎么使用


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……

    2012年12月16日 13:10
  • 反射调用geta方法得到实例

    http://feiyun0112.cnblogs.com/

    2012年12月16日 13:44
    版主
  • 谢谢,是CreateInstance之后转化成相应类型之后,使用的时候,再geta再操作么?

    还有没有另外的办法呀。现在我是在学习抽象工厂模式,有没有办法在

    objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);

    这个之前 判断是否已经存在该实例呀?


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……

    2012年12月16日 14:24
  • 谢谢,是CreateInstance之后转化成相应类型之后,使用的时候,再geta再操作么?

    还有没有另外的办法呀。现在我是在学习抽象工厂模式,有没有办法在

    objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);

    这个之前 判断是否已经存在该实例呀?


    C#初学者,所以提的问题对各位前辈朋友来说可能很简单,也可能问法也不对,非常期待大家的回答……

    引用抽象工厂的全部dll,然后创建一个“单例模式”的静态工厂,或者只有一个私有构造函数的工厂(可以仿造我的单例模式,用锁锁住):

    lock(obj)
    {
        if(objType==null)
        {
               lock(obj)
               {
                     objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);
               }
        }
    }

    或者静态类中静态构造函数直接初始化(无须判断,因为静态构造函数只调用一次)。

    具体可以参考设计模式中“单例模式”:


    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2012年12月17日 2:10
    版主
  • objType =Type.GetType(classfullname).InvokeMember("GetA", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, null);

    http://feiyun0112.cnblogs.com/

    2012年12月18日 2:05
    版主
  • 你好!

        不好意思,没明白你的意图,请问你要实现什么样的功能呢?


    周雪峰

    2012年12月19日 14:27
    版主
  • 给你的对象工厂设置一个 Dictionary<sting,object> 成员,创建之前先按照类型名从字典里取,没有则反射创建新的,然后插入到字典中。你可以把工厂设置为单例模式,或者把字典设置为静态成员。
    2012年12月20日 5:21