zoukankan      html  css  js  c++  java
  • C#泛型-小心使用静态成员变量

    对于泛型类的声明
    其中使用类型参数的构造类型,比如List<T>被称为开放构造类型(open constructed type)
    而不使用类型参数的构造类型,例如List<int>被称为封闭构造类型(closed constructed type)。
    特别要强调的是不同类型参数的封闭构造类型之间是不共享静态成员变量的。

    举个例子

    using System;

    public class List<T>
    {   
        public List(T t)
        {
            _value = t;
            _closedCount++;
        }

        public T Value
        {
            get { return _value; }
        }

        public int ClosedCount
        {
            get { return _closedCount; }
        }

        public static int StaticCount
        {
            get { return _closedCount; }
        }


        private T _value;
        private static int _closedCount = 0;
    }

    public class Test
    {
        static void Main()
        {
            List<double> list1 = new List<double>(3.14);
            Console.WriteLine("List1 Value: {0} Closed Count: {1}", list1.Value, list1.ClosedCount);

            List<double> list2 = new List<double>(0.618);
            Console.WriteLine("List2 Value: {0} Closed Count: {1}", list2.Value, list2.ClosedCount);

            List<string> list3 = new List<string>("divino");
            Console.WriteLine("List3 Value: {0} Closed Count: {1}", list3.Value, list3.ClosedCount);

            Console.WriteLine();

            Console.WriteLine("List<double> Count: {0}", List<double>.StaticCount);
            Console.WriteLine("List<string> Count: {0}", List<string>.StaticCount);
        }
    }

    输出结果:
    List1 Value: 3.14         Closed Count: 1
    List2 Value: 0.618        Closed Count: 2
    List3 Value: divino       Closed Count: 1

    List<double> Count: 2
    List<string> Count: 1

    其中:
    list1与list2同为List<double>,它们之间共用静态成员_closedCount
    而类型为List<string>的list3不能使用_closedCount
    我们从最后两行的输出也可看出结果
    即:不同类型参数的封闭构造类型之间是不共享静态成员变量的。

  • 相关阅读:
    分布式事务总结
    正确使用HttpClient,避免出现大量CLOSE_WAIT的TCP链接
    年终总结
    不如自己读一遍AsyncTask源码
    Android支持的图片格式
    Java Annotation Tutorials
    Android中的LruCache
    Hadoop DistributedCache分布式缓存的使用
    Mapreduce设置多路径输入输出
    Ubuntu Server 12.04安装CDH5方法总结
  • 原文地址:https://www.cnblogs.com/fujinliang/p/4395009.html
Copyright © 2011-2022 走看看