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

Is static context always single in C#?

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

我不能更改库,但我可以copy/rename。

这并不像您想的那么疯狂。事实上,您可以使用 AppDomains.

实现此目的

每个 AppDomain has its own storage location for static variables. So you can just create a second AppDomain in your process, and communicate between them using an object that inherits from MarshalByRefObject like in this MSDN example.

虽然 AppDomains 上的 可以工作,但您也可以使用泛型创建此效果,因为具有不同泛型类型参数的 class 被视为不同的 class,因此有自己的静态字段。

public class SomeClass<T>
{
    public static string SomeField;
}

然后:

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

Console.WriteLine(SomeClass<int>.SomeField);    // A
Console.WriteLine(SomeClass<string>.SomeField); // B

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

这两个建议应该可行,但它们在架构方面都很棒。

我不知道上下文,但在你的情况下,是否可以只创建一个聚合 class 和一个新的 属性,它不是静态的,只有两个实例。 这听起来对我来说是更好的方法。

每当我有智能代码时,我的脑海中就会出现警报。智能代码对于开发人员来说总是太聪明了。