using System;
using System.Collections.Generic;
using System.Text;
namespace CLRSupportExample
{
 public class MyList<T>
 {
    private static int objCount = 0;     
  public MyList()
  {
      objCount++;      
     }
  public int Count
  {
      get
      { return objCount; }
  }   
 }
}
//Program.csnamespace CLRSupportExample
{
 class SampleClass {}
 class Program
 {
  static void Main(string[] args)
  {
   MyList<int> myIntList = new MyList<int>();
   MyList<int> myIntList2 = new MyList<int>();
   MyList<double> myDoubleList = new MyList<double>();
   MyList<SampleClass> mySampleList = new MyList<SampleClass>();
   Console.WriteLine(myIntList.Count);
      Console.WriteLine(myIntList2.Count);
      Console.WriteLine(myDoubleList.Count);
      Console.WriteLine(mySampleList.Count);
      Console.WriteLine(new MyList<SampleClass>().Count);
   Console.ReadLine();
  }
 }
} 这段代码的运行结果是 22112  不太明白为什么是这个结果?

解决方案 »

  1.   

    类是引用类型,objCount 被定义为静态的类型了,你实例化两次MyList类,objCount被累加两次,因此就为2了。我觉得我说的不大对,还请高人……
      

  2.   

    1.Count是静态的,类第一次被调用的时候就会累加,MyList<int>这种类型,实例化了两次,所以MyList<int>对应的Count为2,因为都是在最后统一输出的,所以到最后输出的时候,两个实例化的MyList<int>的Count必然为2.
    2.MyList<double>实际上是另一个类型了,他会对类进行再次初始化,这时它的Count为1.
    3.MyList<SampleClass>是第三种类型,在第四个输出命令时,他只实例化了一次,这时它输出的Count为1。
    4.第五个输出命令仍然是MyList<SampleClass>类型的,但是它是在输出是才实例化的,所以它不会影响到第4个输出命令,只会影响自己本身,所以第五次输出的Count为2.这里需要注意的是,MyList看上去是一个类型,实际上在泛型里面是MyList<T>,根据T的不同,实际上是不同的类型。
      

  3.   

    private static int objCount = 0;     
      public MyList()
      {
          objCount++;      
         }静态变量,在初始化时调用,初始化两次,自然就是2了
      

  4.   

    MyList<int> 与 MyList<double>,可以认为是定义了两个类型,那个静态的成员也是独立的。