Chr*_*ian 27 c# visual-studio-2017
我正在使用VS2017社区,它昨天刚收到更新.今天我想实现一个接口,现在实现如下:
public string City
{
get => throw new NotImplementedException();
set => throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
而不是这(我的预期):
public string City { get; set; }
Run Code Online (Sandbox Code Playgroud)
为何如此改变?不确定这是否特定于C#7或VS或其他什么.我只知道接口的自动实现在过去一周左右发生了变化.
我的界面:
public interface IMyInterface
{
string City { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Kol*_*kov 18
所以,我知道这是一个老问题,但看起来Visual Studio 2017现在允许您在两种样式之间进行选择(throw与普通旧样式相比get;set;).(我正在使用2017社区的15.7.5).
要做到这一点,去工具=>选项=>文本编辑器=> C#=>高级,然后滚动至底部,您应该有一个Implement Interface or Abstract Class部分.
在其中,您可以将When generating properties单选按钮设置为默认的"首选投掷属性",或者通过选择"首选自动属性"将其设置为旧样式.
Pat*_*man 13
我个人希望这是一个错误.此时我们只能猜测团队改变行为的原因.
但是,一般来说,默认情况下有一个很好的理由来实现"失败"代码:作为开发人员,您必须有意识地决定如何实现这段代码.如果方法的默认实现只返回default(T)怎么办?在有人注意到"未实现"的代码之前,代码将"正常工作".
我认为,对于属性,你现在通常可以说,自动实现的属性是要走的路.在99%的事件中,默认实现是正确的,与上述方法推理相反.
看起来他们只是缩短了接口属性的默认实现.在2017年之前的版本中,默认情况下接口属性是这样实现的:
public string City
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
我一直认为这是浪费屏幕空间.就个人而言,我并不喜欢这两种方法,但是使用NotImplementedExceptions来强制实现接口实现以迫使你实际使用它们是有意义的.
| 归档时间: |
|
| 查看次数: |
4503 次 |
| 最近记录: |