代码之家  ›  专栏  ›  技术社区  ›  Itay.B

接口功能C#

  •  2
  • Itay.B  · 技术社区  · 14 年前

    我有一个实现接口的函数。像这样:

    string IMyInterface.MyFunction()
    {
       do something;
    }
    

    此功能在我的课外可用。一切工作都很完美。 现在我还需要从另一个本地非公共函数调用这个函数。这样地:

    void Func2()
    {
      string s;
      s = MyFunction();
    }
    

    问题是我得到了这个错误: “当前上下文local中不存在名称myfunction”

    如有任何帮助,我们将不胜感激。

    TY。

    4 回复  |  直到 14 年前
        1
  •  7
  •   Willem van Rumpt    14 年前

    您已经显式实现了接口方法。 将“this”强制转换到接口,您就可以:

    void Func2()
    {
        string s = ((IMyInterface)this).MyFunction();  
    }
    
        2
  •  4
  •   Stefan Steinegger    14 年前

    它是 explicitly implemented . 只能从类型的引用调用它 IMyInterface . 要在内部调用它,需要强制转换 this .

    s = ((IMyInterface)this).MyFunction();
    

    考虑隐式实现它,显式实现很棘手,您需要一个好的理由来使用它。

        3
  •  2
  •   Chris Pitman    14 年前

    正如其他海报所提到的,您已经显式地实现了接口。另一种选择是像这样实现它:

    string MyFunction()
    {
       do something;
    }
    

    根据我的经验,只有当您担心多个接口中的函数名会发生冲突,但它们有不同的实现时,才显式地实现接口。

        4
  •  0
  •   Rodrick Chapman    14 年前

    我经常使用具有显式接口的以下模式的变体:

    string IMyInterface.MyFunction()
    {
        _myPrivateFunction();
    }
    
    string _myPrivateFunction()
    {
        //Do Stuff...
    }