静态上下文在C#中总是单一的吗?

Arc*_*heg 54 .net c#

我有一个里面有静态字段的库.我想创建一个应用程序并引用这个库,所以我有两个这个静态字段的实例..Net运行时不允许两次引用同一个库,但我想知道是否有可能克服这个限制?

我不允许更改库,但我可以复制/重命名它.

Luc*_*ski 85

这并不像你想象的那么疯狂.实际上,您可以使用AppDomains实现此目的.

每个AppDomain都有自己的静态变量存储位置.所以,你可以创建你的进程第二的AppDomain,并使用从继承的对象他们之间沟通MarshalByRefObject就像在这个MSDN例子.

  • 我喜欢你的回答,请你提供一些甜蜜的LoC :) (3认同)
  • 这可能不是*疯狂*,但它肯定会给我带来一点"糟糕的架构警报". (3认同)

Dan*_*ker 58

虽然Lucas对AppDomains 的建议可行,但您也可以使用泛型创建此效果,因为具有不同泛型类型参数的类被视为不同的类,因此具有自己的静态字段.

public class SomeClass<T>
{
    public static string SomeField;
}
Run Code Online (Sandbox Code Playgroud)

然后:

SomeClass<int>.SomeField = "A";
SomeClass<string>.SomeField = "B";

Console.WriteLine(SomeClass<int>.SomeField);    // A
Console.WriteLine(SomeClass<string>.SomeField); // B
Run Code Online (Sandbox Code Playgroud)

例如,SomeClass<int>将在库中设置,而SomeClass<string>将是您的副本.当然,这只有在您可以更改库或库已经使用泛型时才有效.

  • 这是我见过的最美丽和可怕的仿制药滥用之一. (50认同)
  • 是的,但这些是不同的字段,而不是相同静态字段的两个实例. (3认同)
  • @BradleyUffner等到你在C++中看到CRTP单例 (2认同)