zoukankan      html  css  js  c++  java
  • C# 避免在泛型类型中的声明静态成员

    在非泛型类型中,各个实例共享静态成员:

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         MyClass m1 = new MyClass();
     6         MyClass m2 = new MyClass();
     7         Console.WriteLine(MyClass.Count);
     8         Console.Read();
     9     }
    10 }
    11 class MyClass
    12 {
    13     public static int Count { get; set; }
    14     public MyClass()
    15     {
    16         Count++;
    17     }
    18 }

    运行结果:

    2                                                        

    现在将MyClass声明为泛型类型:

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         MyClass<int> m1 = new MyClass<int>();
     6         MyClass<int> m2 = new MyClass<int>();
     7         MyClass<string> m3 = new MyClass<string>();
     8         Console.WriteLine(MyClass<int>.Count);
     9         Console.WriteLine(MyClass<string>.Count);
    10         Console.Read();
    11     }
    12 }
    13 class MyClass<T>
    14 {
    15     public static int Count { get; set; }
    16     public MyClass()
    17     {
    18         Count++;
    19     }
    20 }

    运行结果:

    2
    1

    在代码里,创建实例时为T指定了不同的数据类型,MyClass<T>相应地也变成了不同的数据类型,不同类型之间不共享静态成员;但是若T所指定的数据类型时一致的,那相同类型的实例是可以共享静态成员。

    为了避免混淆,建议尽量避免在泛型类型中的声明静态成员。


    非泛型类型中的泛型方法并不会在运行时的本地代码中生成不同的类型。

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         Console.WriteLine(MyClass.Func<int>());
     6         Console.WriteLine(MyClass.Func<int>());
     7         Console.WriteLine(MyClass.Func<string>());
     8         Console.Read();
     9     }
    10 }
    11 class MyClass
    12 {
    13     static int Count;
    14     public static int Func<T>()
    15     {
    16         return Count++;
    17     }
    18 }

    运行结果:

    0
    1
    2

    参考:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/xuyouyou/p/13181243.html
Copyright © 2011-2022 走看看