c#中的通用列表和静态变量行为

san*_*ngh 5 c#

我在C#中有一个简单的应用程序.当我运行代码时,我没有得到预期的结果?.我得到2,2,1但我期待1,2,3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication12
{
    class Program
    {
        static void Main(string[] args)
        {
            MyList<int> list1 = new MyList<int>();
            MyList<int> list2 = new MyList<int>();
            MyList<double> list3 = new MyList<double>();
            Console.WriteLine(list1.GetCount());
            Console.WriteLine(list2.GetCount());
            Console.WriteLine(list3.GetCount());
        }
    }
    public class MyList<T>
    {
        static int _count;
        public MyList()
        {
            _count++;
        }
        public int GetCount()
        {
            return _count;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Alb*_*nbo 13

结果如我所料

2
2
1
Run Code Online (Sandbox Code Playgroud)

这篇MSDN博客文章告诉我们

泛型类声明中的静态变量在相同的闭合构造类型(第26.5.2节)的所有实例之间共享,但不在不同的闭合构造类型的实例之间共享.无论静态变量的类型是否涉及任何类型参数,这些规则都适用.


Jar*_*Par 7

这种方式工作的原因与为单个静态声明生成了多少个值有关.给定的每种类型将有一个静态值AppDomain.

在非通用情况下,这意味着声明和值之间存在1-1关系.毕竟string,给定的只有一种类型AppDomain.

在一般情况下,虽然它涉及更多.类型MyList<int>MyList<double>实际上是不同的类型.因此,它们具有彼此独立的单独静态值.