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()异常并手动使属性自动实现......痛苦!毕竟,我在界面中将其定义为自动实现的属性.
任何帮助或建议非常感谢!谢谢.
毕竟,我在界面中将其定义为自动实现的属性.
不,你没有.您将其声明为没有实现的属性.这就是你在界面中可以做的所有事情:你只是说实现界面的类必须提供这些属性的具体实现.
就个人而言,我会担心在接口中有太多的可写属性 - 如果这是你发现的"一直发生的事情",我想知道你是否正在使用可能抽象类更合适的接口.
就你的确切问题而言:我不知道是否有可能改变VS或R#提供接口的默认实现 - 但我还是会反对做出这些改变,说实话.
编辑:在R#选项"代码生成"下,您可以选择抛出异常,返回默认值或提供无法编译的代码.这可能会做你想要的.试一试,但我仍然强烈建议你在走这条路之前要仔细考虑.
注意:您的R#键盘快捷键可能有所不同,我使用的是Resharper 2.x键盘架构.
如果在类上声明接口,然后使用Alt+ Enter并选择"实现成员":
然后你会得到默认的实现,它恰好是抛出NotImplementedException
,除非你改变它.
但是,如果您忽略建议的操作过程,而是使用Alt+ Insert打开"生成"菜单,则可以选择"缺少成员":
这将打开Generate窗口,您可以在其中选择将属性(或属性)实现为自动实现:
这将完全符合您的要求:
class Employee : IEmployee
{
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)