对于泛型类的声明
其中使用类型参数的构造类型,比如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} \t Closed Count: {1}", list1.Value, list1.ClosedCount);

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

List<string> list3 = new List<string>("divino");
        Console.WriteLine("List3 Value: {0} \t 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
我们从最后两行的输出也可看出结果
即:不同类型参数的封闭构造类型之间是不共享静态成员变量的。

转载于:https://www.cnblogs.com/fujinliang/p/4395009.html

C#泛型-小心使用静态成员变量相关推荐

  1. TypeScript class 的静态成员变量

    Static Members 类可能有静态成员. 这些成员与类的特定实例无关. 它们可以通过类构造函数对象本身访问: class MyClass {static x = 0;static printX ...

  2. 为什么静态方法无法直接调用非静态成员变量和方法

    静态方法无法直接调用非静态成员变量和方法 看到这句话,要想到形容的是这样的如下 静态方法里面无法调用非静态变量 下面在写一个对比非静态的方法和静态方法调用变量对比 问题原因 静态变量和静态的方法是属于 ...

  3. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  4. 类的静态成员变量和静态成员函数的使用方法三

    第五个例子,使用类的静态成员变量 源码打印? #include <stdio.h> class Point { public: Point() { m_nPointCount++; } ~ ...

  5. 静态成员变量不占用类的内存空间

    假定程序运行环境为:操作系统Windows 2000,VC6.0编译环境,X86(80586)CPU处理器(32位小字节序处理器,4字节对齐) class CExample { public:     ...

  6. C++中类的静态成员变量和静态成员函数

    静态成员变量: 在类里用static对变量定义,缺省时初始化为0,不能在类中初始化,因为static变量在类实例化之前就已经存在. 在类外用<数据类型><类名>::<静态 ...

  7. 类中静态成员变量 无法解析的外部符号

    [1]如下代码及编译错误 如标题,不做赘述. [2]原因及解决方案 原因:之所以报如上编译错误,因为静态成员变量未初始化. 解决方案:类中静态成员需要在类外进行初始化.其格式为:类型 类名::静态成员 ...

  8. 静态成员变量和非静态成员变量的5个主要区别

    1.从保存位置: a) 静态成员变量: 方法区的静态区域 b) 非静态成员变量: 堆内存中的对象空间里面 2.从书写格式上看: a) 静态成员变量: 在数据类型前面多了一个static修饰 b) 非静 ...

  9. C++中的静态成员变量

    文章目录 1 C++中的静态成员变量 1.1 C++中静态成员变量的使用方法 1 C++中的静态成员变量 1.1 C++中静态成员变量的使用方法 在C++中可以定义静态成员变量: 静态成员变量属于整个 ...

  10. C++ static静态成员变量详解

    对象的内存中包含了成员变量,不同的对象占用不同的内存(已在<C++对象的内存模型>中提到),这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响.例如有两个相同类型的对象 a.b, ...

最新文章

  1. Aliyun 挂载硬盘
  2. 看图说OpenGL之三:是什么在改变物体的颜色
  3. mysql创建外键级联更新_MySQL中利用外键实现级联删除、更新
  4. MAC通过SSH使用PEM文件登录
  5. js中的showModalDialog的实战应用
  6. GT-----FAQ整理
  7. ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法
  8. php的list函数
  9. [转载]PSCAD调用MATLAB/SIMULINK之接口元件设计
  10. ssh 执行 SSH2_MSG_SERVICE_ACCEPT 慢问题
  11. 如何删除gmail快捷链接?
  12. Facebook正测试对话式的评论新界面
  13. Jmeter压力测试实战
  14. 【MATLAB】进阶绘图 ( imagesc 缩放颜色显示图像 | imagesc 函数 | Colormaps 颜色图 )
  15. 漫画:什么是二分查找?(修订版)
  16. mysql比较两张表中两个字段值_如何通过SQL找出2个表里值不同的列的方法
  17. stata学习笔记|离散被解释变量
  18. delete adjacent duplicates from用法(以某个关键字删除相邻重复行的数据)
  19. STM32H743必要外围电路分析
  20. 内网穿透远程群晖NAS:免费安装cpolar内网穿透 1/6

热门文章

  1. 跟我从零基础学习Unity3D开发--NGUI入门基础
  2. 获取C#代码执行的时间(精确到毫秒)
  3. Mosets Tree开发笔记
  4. php5配置与IIS中isapi筛选器不能加载PHP的解决办法
  5. 得到一棵树 取自表内自递归(即ID 与ParentID)
  6. 126 MySQL存储引擎概述
  7. 我的2017之一只混迹于小城市的.net程序猿
  8. 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象...
  9. MySQL5 使用概要
  10. 网站运营模式之行业网站分析