这与其说是一个真正的问题,不如说是一个文档.这一点似乎还没有得到解决(除非我错过了),所以这里是这样的:

设想一个包含静电成员的泛型类:

class Foo<T> {
    public static int member;
}

每个特定类是否有一个新的成员实例,或者所有Foo类型类是否只有一个实例?

可以很容易地通过以下代码进行验证:

Foo<int>.member = 1;
Foo<string>.member = 2;
Console.WriteLine (Foo<int>.member);

结果是什么?这种行为记录在哪里?

推荐答案

static字段在所有实例of the same type之间共享.Foo<int>Foo<string>是两种不同的类型.以下代码行可以证明这一点:

// this prints "False"
Console.WriteLine(typeof(Foo<int>) == typeof(Foo<string>));

至于在哪里记录这一点,可以在C#语言规范(针对C#3)的第1.6.5 Fields节中找到:

静态字段正好标识一个

如前所述;Foo<int>Foo<string>不是同一类;它们是由同一泛型类构造的两个不同类.上述文件第4.4节概述了这一过程:

泛型类型声明本身, 表示未绑定的泛型类型,该泛型类型 作为一张"蓝图"用来形成许多 不同的类型,通过应用的方式 键入参数.

.net相关问答推荐

竖线在 PropertyGroup .csproj 文件中的含义

使用 PEM 文件创建 DSA 签名

使用 PostAsJsonAsync C# 时出现错误请求

如何将 Assembly.CodeBase 转换为 C# 中的文件系统路径?

是否有任何为 C# 编写的模糊搜索或字符串相似函数库?

为什么这个多态 C# 代码会打印它的功能?

为什么 StyleCop 建议在方法或属性调用前加上this?

为什么 C# 不允许像 C++ 这样的非成员函数

具有透明背景且包含不透明控件的 WPF 窗口

隐式与显式接口实现

C# 的 Actors 有什么好的实现吗?

清除 .NET 的 StringBuilder 内容的最佳方法

C#中的引用类型

如何允许程序集(单元测试)访问另一个程序集的内部属性?

什么是 C# 中的自动属性,它们的用途是什么?

在生产环境中部署调试符号(pdb 文件)有什么风险?

如何在 RabbitMQ 中设置重试次数?

如何防止任务的同步延续?

在 .NET 中获取默认打印机的最佳方法是什么

如何将两个 List 相互比较?