例如我有这么个类:
    public class timeInput
    {
       public string strTime;
       public string strEvent;
    }然后有一个函数
   void Display(void)
   {
      int i;      for(i=0; i < 2; i++)
      {
         timeInput t = new timeInput();
         t.strTime = (string)i;
         t.strEvent = (string)i;
      }      //我的问题是现在我有了两个对象timeInput的实例,并且他们的名字都是t
      //但是他们的成员分别有不同的值,这时,我怎么才能区分这两个实例,并提取其中字段的数据
      //求高手指点,谢谢!!   }

解决方案 »

  1.   

    首先,你应该知道对象是类的实例,也许应该问:如何区分同一个类的不同实例另外,所有的对象都是继承与OBJECT这个对象的,而这个对象有一个方法叫:GetHashCode(),正常情况下(未重载或覆盖),这个方法返回的就是这个对象(实例)的唯一哈希值
      

  2.   

    自己说错了,应该说所有的类都是继承于Ojbect这个类的 :-)所以你在判断两个实例的时候看他们的HASHCODE是不是相等就可以啦
      

  3.   

    谢谢改正小弟的错误("对象是类的实例"), 关于HashCode我了解太少,昨天试了一下,没弄出来
      

  4.   

    另外hashCode好像还存在冲突的可能啊?
      

  5.   

    这是我刚才搜索到的:
        struct MyStruct
            {
                private long num;            public long Num
                {
                    get
                    {
                        return num;
                    }
                    set
                    {
                        num = value;
                    }
                }
            }
          对于这个类型,默认的GetHashCode()是基于第一个成员num来生成的。对于Int32及其范围之内的类型来说,返回值等于num的值。但是上例中num的范围超出了Int32的范围,这就可能会造成一些小麻烦。比如我下面这个例子:MyStruct myStruct1 = new MyStruct();
    MyStruct myStruct2 = new MyStruct();
    myStruct1.Num = -2147483648;
    myStruct2.Num = 2147483647;Console.WriteLine(myStruct1.GetHashCode());
    Console.WriteLine(myStruct2.GetHashCode());
          两个不相等的实例得到的结果却相等,都是2147483647。
      

  6.   

    馍办法了, 你就看他们的引用吧
    这个ReferenceEquals也是object类本身就有的一个方法【来自MSDN】
    public static bool ReferenceEquals (
    Object objA,
    Object objB
    )参数
    objA
    要比较的第一个 Object。 objB
    要比较的第二个 Object。 返回值
    如果 objA 是与 objB 相同的实例,或者如果二者都为空引用,则为 true;否则为 false。
      

  7.   

    哥们,你仔细看看你那程序,能同时存在两个t对象吗?每次循环的时候,你的局部变量t的存在范围就是在循环内部,所以每次循环结束之后,
    局部变量t就自动消失了,因为是分配在堆栈上的,
    下次再循环的时候,已经就不是过去的t了···所以你的问题根本就不是问题
    也不可能会出现两个临时变量t的情况···
      

  8.   

    抛开这个问题,如果真的要是想要比较两个对象,
    gethashcode方法就可以了···至于你举的那个例子不过是特殊情况罢了
      

  9.   

    xiao_p(茫茫人海)
    估计楼上的兄弟都没有仔细看你的程序就是直接看你的问题了···
    =============================================被你发现了。。嘿嘿,是没仔细看,确切的说是觉得里面有问题,T的生存期不就在一个循环中嘛,所以也没多想了
      

  10.   

    那考虑另外一种情况:
       假设一个窗体为form1 其上有一个按钮, 点击这个按钮出现 form2 这时 每次点击都会出现一个form2 问题是:这么多的form2怎么区分呢?
    请高手给个可行的例程,谢谢!!
      

  11.   

    对于你下面的问题,在windows里面,每个窗口是有自己的唯一的句柄。我不是很了解.NET,但我想既然还运行在windows平台,应该也有句柄存在。所以你可以定义一个全局数组变量,用来保存你每次新建的FORM2的句柄,就自然可以区分相同的FORM2。
      

  12.   

    用ReferenceEquals看他们在内存中的引用就可以