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

我应该显式地还是隐式地实现接口成员?

c#
  •  8
  • jasonh  · 技术社区  · 16 年前

    This question Eric Lippert's answer 在实现接口的方法时,您决定是使用显式实现还是隐式实现?

    3 回复  |  直到 8 年前
        1
  •  8
  •   Rui Jarimba    12 年前

    (我个人认为)只有当具有相同签名的方法之间发生冲突时,才需要显式实现。

    例如,在实施 IEnumerable<T> ,您应该实现两种方法 GetEnumerator() 具有相同的签名,但返回类型除外。所以你必须实施 IEnumerable.GetEnumerator() 明确地:

    public abstract class MyClass<T> : IEnumerable<T>
    {
        public IEnumerator<T> GetEnumerator()
        {
            return ...;
        }
    
        IEnumerator IEnumerable.GetEnumerator() // explicit implementation required
        {
            return GetEnumerator();
        }
    }
    

    显式实现的另一个用途是,如果不希望通过对象实例调用该方法,而只希望通过接口调用该方法。我个人认为这没有多大意义,但在一些非常罕见的情况下,它可能是有用的。

        2
  •  3
  •   Paul    16 年前

    Philippe的答案是实用的,但也有架构方面的考虑。

    接口用于使类兼容,以便其他对象可以使用它们。如果只有那些消费对象需要接口的功能,那么它就应该受到限制——以最小特权为原则。如果没有必要将该接口方法公开给该类的所有其他用户。

    保罗

        3
  •  1
  •   kyoryu    16 年前