改善C#程序的157个建议——建议33学习笔记:避免在泛型类型中声明静态成员

首先查看下面的代码:


 public class MyList<T>

   {

       public static int Count { get; set; }

       public MyList()

       {

           Count++;

       }

   }

   class Program

   {

       static void Main(string[] args)

       {

           MyList<int> list1 = new MyList<int>();

           MyList<int> list2 = new MyList<int>();

           MyList<string> list3 = new MyList<string>();

           Console.WriteLine(MyList<int>.Count);

           Console.WriteLine(MyList<string>.Count);

           Console.ReadKey();

       }

   }


输出的结果:


2


1


从输出结果可以看出来,不同的数据类型,他们之间的静态成员是不共享的,同一数据类型之间可以共享静态成员。但是非泛型类型中的泛型方法并不会再运行时的本地代码中生成不同的类型。例:


 public class MyList

   {

       public static int Count { get; set; }  

       public static int Func<T>()      

        {

           return Count++;

       }

   }

   class Program

   {

       static void Main(string[] args)

       {

           

           Console.WriteLine(MyList.Func<int>());

           Console.WriteLine(MyList.Func<int>());

           Console.WriteLine(MyList.Func<string>());

           Console.ReadKey();

       }

   }


输出结果:


0


1


2


上一篇:解决Node.js mysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题


下一篇:遵循JAVA谓词的语法