【发布时间】:2016-03-25 04:31:13
【问题描述】:
我有两个非常相似的静态类,我认为它们应该共享相同的代码库,但我一直遇到 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);
}
}
【问题讨论】:
-
更适合codereview。
-
也许你应该在codereview.stackexchange.com上发帖
-
从假设出发,尽量避免静态。在大多数情况下,没有理由使用它们。这样做将使您的代码更加模块化和可测试。
-
@SBI 我见过很多烂代码库,它们源于“有人在我之前做过这件事,所以让我们继续做下去”的心态。
-
继承在设计上不适用于静态类,请参阅stackoverflow.com/questions/774181/…。