C#:表示方法的可执行方式是作为接口的一部分

Sar*_*els 2 c# language-features annotations interface

在C#中是否有一种方法可以将方法标记为类的一部分以满足该类实现的接口?我发现自己有时想在挖掘类的代码时为什么会有一些方法,但是当我尝试删除一个因为它没有被使用时,我认为为了让类实现一些接口是必要的.将这些方法标记为这样是很好的.也许就像Java中的@Override注释一样.

编辑: 我宁愿不显式实现接口,因为然后访问我的类的实例上的接口方法变得更麻烦(即,MyClass必须IMyInterface在调用之前转换一个实例MyInterfaceMethod).

编辑: 我也不想使用区域.我不希望通过一些任意名称松散地描述一大块代码作为接口实现的一部分,而是表示特定方法,无论它们在类中的哪个位置,都是接口的一部分.甚至一些XML评论模板用于说明该方法所属的接口会很好.

编辑: 所有答案似乎建议我明确实现接口,我不想做,或我使用区域,我也不想这样做.我认为威尔最了解我的要求.我希望有类似注释的东西,所以我可以做类似以下的事情:

[Interface(IMyInterface)]
public void MyImplicitlyImplementedInterfaceMethod() { }
Run Code Online (Sandbox Code Playgroud)

或者,正如dss539在对此答案的评论中提到的那样:

public implement void MyImplicitlyImplementedInterfaceMethod() { }
Run Code Online (Sandbox Code Playgroud)

就像我们override今天一样: public override bool Equals(object obj) { }.

Mic*_*ene 5

您有三个选择:

显式实现接口:

您可以使用语法显式实现接口IInterface.MethodName,例如:

bool IInterface.MethodName(string other) 
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

将接口成员包装在一个区域中

如果您选择通过 UI“实现接口”,工具已经将您的代码包装在一个区域中:

#region IInterface members

public bool MethodName(string other)
{
    // code
}

#endregion
Run Code Online (Sandbox Code Playgroud)

通过评论记录

//C# 允许您通过、、/*或XML 文档注释添加多种注释。随意使用!

  • 仅为了代码清晰起见,您可以将其包装在“#region IInterface 方法”和“#endregion”中——ReSharper 等。为您执行此操作。当然您也可以添加评论。 (3认同)
  • 如果我显式实现该接口,调用该方法会很痛苦,因为我必须将“MyClass”实例强制转换为“IInterface”才能访问该方法。 (2认同)
  • @Michael 抱歉,我的最后一条评论是@John,他说“这就是你想要的”。我是-1票之一。(抱歉,没有什么个人的!)我真的不喜欢 1) 未强制执行的元数据 [#region/comments] 2) 显式实现。不过,我赞扬你提出的想法。你的答案写得很好。 (2认同)

Gio*_*rgi 5

用#region MyInterface MembersVisual Studio为您做的事情围绕它们.

如果#region仅用于接口成员,则会降低可读性.另一方面,如果将它用于私有变量,属性,方法,事件和不同的接口成员,代码将变得更具可读性.您还可以按功能对成员进行分组.

还有一个选择是使用一个为您完成它的工具.例如,您可以使用NArrange - .NET Code Organizer/Formatter/Beautifier

  • 这是一种常见的做法,但我发现它使代码的可读性降低. (3认同)
  • 是.很明显,大多数人都同意你的看法.[你赢了;)]然而,我觉得#regions总是(是的,总是)会降低代码的可读性.另外,正如我在其他答案的评论中提到的,不能保证你的`#region`或评论是_true_.如果有人更改了界面,很容易变得错误. (2认同)