如何在静态类之间共享代码
本文关键字:共享 代码 之间 静态类 | 更新日期: 2023-09-27 18:27:22
我有两个非常相似的静态类,我认为它们应该共享相同的代码库,但我在c#中一直受到限制。
接口不能声明静态方法,静态方法不能是虚拟的等等。
最终,我只想要一个更好看的版本如下:
public class StaticCoroutine {
private static MonoBehaviour runner;
public static void Start(IEnumerator coroutine) {
if (runner == null) {
runner = new GameObject("[Static Coroutine Runner]").AddComponent<StaticCoroutineRunner>();
}
runner.StartCoroutine(coroutine);
}
public static void Stop(IEnumerator coroutine) {
if (runner != null) runner.StopCoroutine(coroutine);
}
}
public class StaticCoroutineInfinite {
private static MonoBehaviour runner;
public static void Start(IEnumerator coroutine) {
if (runner == null) {
runner = new GameObject("[Static Coroutine Infinite Runner]").AddComponent<StaticCoroutineRunner>();
Object.DontDestroyOnLoad(runner.GameObject);
}
runner.StartCoroutine(coroutine);
}
public static void Stop(IEnumerator coroutine) {
if (runner != null) runner.StopCoroutine(coroutine);
}
}
您坚持认为这是静态的,这似乎只是在倒退旧的单例难题。static
是模块化的敌人。
我真的建议你不要这样。。。即使不使用IoC/DI,也应该将服务作为可以注入的依赖项来提供。
假设您现在不愿意完全重构,我建议将所有功能移到一个可实例化的类中,并为该类的实例提供一个静态访问器。
public class MyThing : SomeBaseClass, ICanImplementInterfaces
{
private Lazy<MyThing> myThingLazy = new Lazy<MyThing>(() => new MyThing())
public static MyThing Instance
{
get
{
return myThingLazy.Value;
}
}
}
至少现在,当你升级你的体系结构时,你不会留下一堆难以维护/测试的静态,甚至更糟的是,拒绝多次实例化的类。