C# 为什么是;显式实现接口";仅在某些情况下可用,不同时提供;“实现接口”;(即隐式)?

C# 为什么是;显式实现接口";仅在某些情况下可用,不同时提供;“实现接口”;(即隐式)?,c#,.net,visual-studio,visual-studio-2013,C#,.net,Visual Studio,Visual Studio 2013,我只是尝试在一个已经实现的类上(重新)实现我的接口,因为我向接口添加了一些属性。现有属性是隐式实现的,即我在第一次实现时选择了此选项: 现在,当我在向接口添加新属性后执行相同的操作来重新实现它时,我只有显式实现的选项: 为什么有时会发生这种情况?我以前做过很多次,它按照“预期”的方式工作,并且总是只添加缺少的成员实现。如果选项实际在那里,并且它实际上会添加存根以便方法隐式实现接口,那么代码就不会编译,因为您有两个具有相同签名的方法(因为您已经将接口的方法作为类的方法)该选项的唯一其他真正明智

我只是尝试在一个已经实现的类上(重新)实现我的接口,因为我向接口添加了一些属性。现有属性是隐式实现的,即我在第一次实现时选择了此选项:

现在,当我在向接口添加新属性后执行相同的操作来重新实现它时,我只有显式实现的选项:


为什么有时会发生这种情况?我以前做过很多次,它按照“预期”的方式工作,并且总是只添加缺少的成员实现。

如果选项实际在那里,并且它实际上会添加存根以便方法隐式实现接口,那么代码就不会编译,因为您有两个具有相同签名的方法(因为您已经将接口的方法作为类的方法)该选项的唯一其他真正明智的行为是,如果保留该选项,它将什么也不做(因为已经有一个隐式实现).

如果选项实际存在,并且它实际上会为隐式实现接口的方法添加存根,那么代码将不会编译,因为您有两个具有相同签名的方法(因为您已经将接口的方法作为类的方法)。如果保留该选项,唯一其他真正明智的行为是它什么也不做(因为已经有一个隐式实现).

@Ehsan Sajjad——我知道。那真的不相关。@Ehsan Sajjad:从这个问题来看,假设他知道显式实现接口的含义可能是安全的。该死,现在我无法重新编写。我正在尝试编写一个代码示例。如果我找到了,我会发布。不过,图片本身就说明了一切。@BoltClock我的错误没有请仔细阅读问题,检查您是否没有与新接口成员同名的私有成员或受保护成员。这样,它就无法隐式自动实现,因为这样您将同时拥有同名的公共成员和私有成员。@EhsanSajjad--我知道。这真的不相关。@Ehsan Sajjad:从问题来看,它是probab我可以放心地假设他知道显式实现接口意味着什么。该死,现在我无法重新编程。我正在尝试编写一个代码示例。如果我找到一个,我会发布。不过,图片本身就说明了问题。@BoltClock我的错误没有阅读问题。请检查您是否没有与新接口我同名的私有或受保护成员mber。然后它不能隐式自动实现,因为这样您将拥有同名的public和private成员。不是真的,我一直都这样做。它只是添加缺少的成员。@rory.ap您没有缺少的成员。我不明白。OP说他有实现了接口的类,然后将新成员添加到接口。所以这个成员是类中缺少,OP想实现它。@Evk OP的代码已经在履行更新接口的接口契约。不是真的,我一直在这样做。它只是添加缺少的部分。@rory.ap你没有缺少的部分。我不明白。OP说他已经实现了接口的类,然后向接口添加了新成员。所以类中缺少成员,OP希望实现它。@Evk OP的代码已经在履行更新接口的接口约定。