我不知道为什么我开始思考这个问题,但现在我似乎无法停止。
在 C# 中——可能还有很多其他语言,我记得 Delphi 也曾经让你这样做——编写以下语法是合法的:
class WeirdClass
{
private void Hello(string name)
{
Console.WriteLine("Hello, {0}!", name);
}
public string Name
{
set { Hello(name); }
}
}
换句话说,该房产有一个setter but no getter, it's 只写.
我想我想不出任何理由为什么会这样illegal,但我从未真正在野外见过它,而且我在野外见过一些非常精彩/可怕的代码。看起来有点代码味道;编译器似乎应该给我一个警告:
CS83417:属性“名称”似乎完全无用且愚蠢。糟糕的程序员!考虑用方法替换。
但也许我做这件事的时间还不够长,或者工作的领域太窄,看不到任何有效使用这种结构的例子。
现实生活中是否存在无法用直接方法调用替换或变得不太直观的只写属性的示例?
代码分析(又名 FxCop)确实可以为您提供诊断:
CA1044:微软设计:因为
属性“WeirdClass.Name”是只写的,
要么添加一个属性获取器
可访问性大于或
等于它的 setter 或转换它
属性转化为方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)