【问题标题】:Are static members of generic classes shared between types泛型类的静态成员是否在类型之间共享
【发布时间】:2010-08-09 07:19:42
【问题描述】:

我正在尝试创建一个泛型类,该类将具有一些基于类型的静态函数。每种类型都有静态成员吗​​?还是仅在使用泛型的地方?我问的原因是我想要每种类型的锁对象,而不是它们之间共享的对象。

如果我有

class MyClass<T> where T:class
{
    static object LockObj = new object();
    static List<T> ObjList = new List<T>();
}

我知道 ObjList 肯定会为使用的每种泛型类型创建不同的对象,但 LockObj 会在每个泛型实例(MyClass&lt;RefTypeA&gt;MyClass&lt;RefTypeB&gt;)之间有所不同还是相同?

【问题讨论】:

    标签: c# generics compiler-construction static


    【解决方案1】:

    请自行检查!

    public class Static<T>
    {
        public static int Number { get; set; }
    }
    
    static void Main(string[] args)
    {
        Static<int>.Number = 1;
        Static<double>.Number = 2;
        Console.WriteLine(Static<int>.Number + "," + Static<double>.Number);
    }
    // Prints 1, 2
    

    【讨论】:

    【解决方案2】:

    每个 T 都会有所不同。基本上,对于所有不同的 T,您将拥有不同的类型,并且成员不会在不同类型之间共享。

    【讨论】:

      【解决方案3】:

      C# 中实例化的泛型类型在运行时实际上是不同的类型,因此不会共享静态成员。

      【讨论】:

      • 我很担心,因为我的理解是每个值类型都有一组不同的代码,但引用类型使用具有不同类型约束的相同“通用”代码集。只是检查极端情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2011-03-27
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多