代码之家  ›  专栏  ›  技术社区  ›  devio

意外的c#接口实现编译器错误

  •  0
  • devio  · 技术社区  · 14 年前

    interface IFooBar
    {
        void Foo();
        void Bar();
    }
    
    class FooBar : IFooBar
    {
        void IFooBar.Foo()
        {
        }
    
        void IFooBar.Bar()
        {
            this.Foo();
        }
    }
    

    线路这个。福();引发编译器错误

    '我的项目.FooBar'不包含 “Foo”的定义,没有扩展名 '类型的参数'我的项目.FooBar' 使用指令或程序集

    如果我选择公共方法而不是接口.方法声明样式,代码编译:

    class FooBarOk : IFooBar
    {
        public void Foo()
        {
        }
    
        public void Bar()
        {
            this.Foo();
        }
    }
    

    我想了解产生此错误的原因,以及如何使用接口.方法符号

    3 回复  |  直到 14 年前
        1
  •  1
  •   Jim Mischel    14 年前

    要解决这个问题,您可以写:

    ((IFooBar)this).Foo();
    

    看一看这个 Explicit Interface Implementation Tutorial this.Foo() 不起作用。

        2
  •  1
  •   Kieron    14 年前

    你试过在代码中使用接口语法吗?

    ((IFooBar)this).Foo ();
    

    我认为这是因为实现是有效隐藏的,确保您必须将其强制转换为 IFooBar 为了使用它。

        3
  •  0
  •   Kleinux    14 年前

    这称为显式接口实现。它允许您实现一个接口,而不公开这些方法。例如,您可以实现IDisposable,但可以提供一个public Close()方法,该方法对api的用户更有意义。内部IDisposable.处置()方法将调用Close方法。

    interface IFooBar
    {
        void Foo();
        void Bar();
    }
    
    class FooBar : IFooBar
    {
        void IFooBar.Foo()
        {
        }
    
        void IFooBar.Bar()
        {
            ((IFooBar)this).Foo();
        }
    }