在将接口实现到类中时如何创建自动实现的属性?

Fre*_*ter 14 c# properties interface class

当我第一次在一个类中实现一个接口时,我希望resharper 6或visual studio 2010将我的属性实现为自动实现的属性,而不是put new nonImplementedException();的默认值.我怎样才能做到这一点?例如:

public interface IEmployee
{
// want this to stay just like this when  implemented into class
ID { get; set; }
}

public class Employee : IEmployee
{
// I do not want the throw new NonImplemented exception
// I want it to just appear as an auto implemented property
// as I defined it in the interface
public int ID
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

因为这种情况一直发生,我发现自己不得不经常重构并手动删除那些抛出新的UnImplimented()异常并手动使属性自动实现......痛苦!毕竟,我在界面中将其定义为自动实现的属性.

任何帮助或建议非常感谢!谢谢.

Jon*_*eet 7

毕竟,我在界面中将其定义为自动实现的属性.

不,你没有.您将其声明为没有实现的属性.这就是你在界面中可以做的所有事情:你只是说实现界面的类必须提供这些属性的具体实现.

就个人而言,我会担心在接口中有太多的可写属性 - 如果这是你发现的"一直发生的事情",我想知道你是否正在使用可能抽象类更合适的接口.

就你的确切问题而言:我不知道是否有可能改变VS或R#提供接口的默认实现 - 但我还是会反对做出这些改变,说实话.

编辑:在R#选项"代码生成"下,您可以选择抛出异常,返回默认值或提供无法编译的代码.这可能会做你想要的.试一试,但我仍然强烈建议你在走这条路之前要仔细考虑.


svi*_*ick 7

注意:您的R#键盘快捷键可能有所不同,我使用的是Resharper 2.x键盘架构.

如果在类上声明接口,然后使用Alt+ Enter并选择"实现成员":

选择

然后你会得到默认的实现,它恰好是抛出NotImplementedException,除非你改变它.

但是,如果您忽略建议的操作过程,而是使用Alt+ Insert打开"生成"菜单,则可以选择"缺少成员":

选择

这将打开Generate窗口,您可以在其中选择将属性(或属性)实现为自动实现:

生成窗口

这将完全符合您的要求:

class Employee : IEmployee
{
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 完善!谢谢,这正是我要找的.我使用tdd进行编程,并且不断地在我的接口中重构/移动/添加/删除项目,因此手动调整在我的类中实现的大量接口中抛出新的NonImplemented()异常总是非常耗时.我正在使用resharper 6和resharper 2.x键盘布局,所以你的指令工作正常.再次感谢您的回复(也为每个人)! (2认同)