我遇到了错误,我可以在网上找到原因。我有这三种方法:
public enum GO
{
thatGO, parent, child
};
public static void FadeOut(this GameObject go, float fadeTime)
{
Task t = new Task(FadeOut(go, fadeTime, false, GO.thatGO));
new Task(TaskKiller(20f, t));
}
public static void FadeOut(this GameObject go, float fadeTime, bool destroy)
{
Task t = new Task(FadeOut(go, fadeTime, destroy, GO.thatGO));
new Task(TaskKiller(20f, t));
}
public static void FadeOut(this GameObject go, float fadeTime, bool destroy, GO wichDestroy)
{
Task t = new Task(FadeOut(go, fadeTime, destroy, wichDestroy));
new Task(TaskKiller(20f, t));
}
前2个方法工作正常,任何错误,但是当我写最后一个(带枚举作为参数的那个)时,我得到错误:
错误CS0663:重载方法`Extensions.FadeOut(this UnityEngine.GameObject,float,bool,Extensions.GO)'不能有所不同 仅使用参数修饰符
我在互联网上搜索了很多,但我无法理解为什么会出现这个错误。 欢迎任何帮助..
编辑: 我忘了说
中的方法FadeOut
Task t = new Task(FadeOut(go, fadeTime, destroy, wichDestroy));
与上述方法不同。它的
public static IEnumerator FadeOut(GameObject go, float time, bool destroyGO, GO whatGO)
答案 0 :(得分:0)
这个答案是从提到递归电话的t34t5答案中推断出来的。
您可以看到静态FadeOut方法3与方法1和2中调用的FadeOut函数具有完全相同的参数。
新的静态方法3与方法1和2中调用的静态/非静态方法之间可能存在冲突,可能返回一个值(即非" void")。
答案 1 :(得分:0)
正如我从评论中理解的那样,你有实例方法,它只有你的扩展方法的返回类型不同。 所以问题是在使用重载时返回类型不是签名的一部分。
考虑这种情况。
public int Foo() {}
public double Foo() {}
var num = Foo();
应该叫哪一个? out和ref参数相同。