Visual Studio 2019
对private给出以下建议_myNum
:auto-property
代替使用。起初,我很想这样做,摆脱了这个private
变量,并使用了一个属性private set
。但这并不能提供相同的功能:我希望公共属性公开此给定的信息,并且仅在可以设置此数据的位置放到一个地方-构造函数,也就是readonly
关键字。
换句话说,我是对的,这个建议并不总是正确的吗?
public class Foo
{
public int MyNum { get { return _myNum; } }
private readonly int _myNum;
public Foo(int num)
{
_myNum = num;
}
}
应用自动完成推荐,代码如下所示:
public int MyNum { get; }
public Foo(int num)
{
MyNum = num;
}
Visual Studio建议您使用只读属性来简化和/或改进基于某些算法的代码,这些算法考虑了不同的通用和标准编码技术来创建干净,精简,健壮和优化的代码。
在这里,目标是替换获取私有字段值而不执行任何其他操作的只读属性以及该私有字段。
因此,如果您接受此情况下列表中的相关建议(VS2017我有几个建议),则在建议的选项中选择“使用自动属性”选项以进行更改时,将自动为您简化书面代码代码(其他肯定不相关):
public class Foo
{
public int MyNum { get; }
public Foo (int num)
{
MyNum = num;
}
}
这是一个正确的建议,接受它是合适的。
其他建议会产生您在大多数情况下不需要的东西...
如果计划在getter中添加行为,则可以忽略Visual Studio中的以下建议:
public class Foo
{
public int MyNum
{
get
{
return _myNum >= 100 ? 100 : _myNum;
}
}
private readonly int _myNum;
public Foo(int num)
{
_myNum = num;
}
}
否则,如果您想要一个只读数据成员,则可以使用一个只读字段:
public class Foo
{
public readonly int MyNum;
public Foo (int num)
{
MyNum = num;
}
}
但是,如果您需要将此数据成员作为属性(例如,要在序列化中使用或由Visual Studio Designers和Helpers使用),并且通常必须可写...并且如果使用C#9+,则可以使用init -only属性:
public class Foo
{
public int MyNum { get; init; }
public Foo (int num)
{
MyNum = num;
}
}
同样,在C#9之前且没有只读属性的情况下,具有与私有字段耦合的属性,并删除了Visual Studio重构辅助建议,而无需禁用此模块,您可以简单地使用经典的getter方法来避免Visual Studio代码重构建议:
public class Foo
{
private readonly int _myNum;
public int GetMyNum() => _myNum;
public Foo(int num)
{
_myNum = num;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句