none
关于实例引用计数的问题 RRS feed

  • 问题

  • 比如说 现在 我定义一个 
    var n=new cls();

    var q=n;

    在这种情况下,有什么方法可以知道这个实例当前被引用了多少次了呢,  因为有时候我需要将这个实例作为返回值返回,后保存到一个列表里面,当只有1个引用的时候,我想在列表中删除

    2009年9月14日 15:18

答案

  • 你好!你可以用工厂模式来做如

    public class NFactory
    {
        public  static Int32 Count = 0;

        public static N CreateN()
        {
            Count++; 
    // 你的代码
            return new N();
        }
    }

    N n1 = NFactory. CreateN();

    知识改变命运,奋斗成就人生!
    2009年9月15日 1:10
    版主
  • 你好!
         如果这个类不是你编写的,就直接在自己的代码中维护这样一个字段,每次引用加1。
    周雪峰
    2009年9月15日 3:44
    版主

全部回复

  • 最简单方法用 ++变量int
    2009年9月14日 15:35
  • 不过最大问题是,那个类有可能不是我自己写的
    2009年9月14日 16:20
  • 您好,目前没有查到资料说明实例里有存储被引用的计数器。
    如果要实现的话,估计要遍历托管堆,查找相同TypeHandle值的。我想这是不可取的。性能上会有很大的问题。
    2009年9月14日 16:47
  • 比如说我现在一个对象中包含了一个列表list<MethodInfo>,,,这个列表里的内容是一些不同窗体的同一个方法,比如说是ToString(),,我想要在这个方法关联的窗体已经卸载或者除了当前对象之外,再也没有被引用的时候,在list里删除相应的methodinfo,要怎么才能实现这样的功能呢...form是比如的,methodinfo的目标类不一定是窗体,所以不一定有关闭的事件
    2009年9月14日 16:53
  • 你好!你可以用工厂模式来做如

    public class NFactory
    {
        public  static Int32 Count = 0;

        public static N CreateN()
        {
            Count++; 
    // 你的代码
            return new N();
        }
    }

    N n1 = NFactory. CreateN();

    知识改变命运,奋斗成就人生!
    2009年9月15日 1:10
    版主
  • 你好!
         如果这个类不是你编写的,就直接在自己的代码中维护这样一个字段,每次引用加1。
    周雪峰
    2009年9月15日 3:44
    版主
  • 嗯,实在没办法也就只能这样咯
    2009年9月15日 4:52