在C#中,静态类不能从object以外的任何其他类派生。目前我有这个基类:
public static class BaseModule
{
public static string UsedSource {get; set;}
public static Write(string text)
{
OtherStaticClass.Log(UsedSource, text);
}
}现在,根据我使用的类,我想要更改UsedSource。
// this does not work
internal static class ModuleA : BaseModule
{
static ModuleA(){
UsedSource = "A" // just an example
}
}
// this does not work
internal static class ModuleB : BaseModule
{
static ModuleB(){
UsedSource = "B" // just an example
}
}应该是这样调用的
ModuleA.Write("Hi");
ModuleB.Write("Hi");这种方法不起作用,因为静态类不能从object以外的任何对象派生。是否有其他方法可以更改该属性?
发布于 2019-07-10 20:14:44
使用静态类意味着使用单例。单例违背了跟踪类的有效依赖关系的目的。
无论如何,你可以通过重构你的代码和使用工厂来解决这个问题:
在这种情况下,只需删除static关键字并让类可继承(您必须添加适当的virtual关键字以允许正确继承):
public class BaseModule
{
public string UsedSource {get; set;}
public Write(string text)
{
OtherStaticClass.Log(UsedSource, text);
}
}然后,添加一个包含引用的额外类(我给出了无用的名称,重点放在用途上):
public static class MySingleton
{
public static BaseModule _Module;
public static BaseModule Module
{
get
{
return _Module;
}
}
public static void ChangeImplementation (BaseModule module)
{
// do your checks here
_Module = module;
}
}这样你就能达到你的要求了。
正如您所看到的,这段代码有几个问题,其中很重要的一点是,这段代码具有全局副作用,并且不是线程安全的。
一种更好的方法是完全删除单例,并在需要时将BaseModule类(可以继承)作为方法/构造函数的参数传递。
https://stackoverflow.com/questions/56970150
复制相似问题