使用枚举的错误重载方法 - C#(错误CS0663)

时间:2015-08-07 20:02:00

标签: c# methods enums overloading

我遇到了错误,我可以在网上找到原因。我有这三种方法:

 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)

2 个答案:

答案 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参数相同。