你经常看到C#速记getter / setter方法的滥用?
-
21-08-2019 - |
题
在C#中,您可以创建的getter /比其他语言更简单的方法制定者:
public int FooBar { get; set; }
这创建你不能直接解决,与外部属性“fooBar”的内部专用变量直接访问它。
我的问题是 - 你经常看到这种滥用?这似乎是它具有很高的潜力,往往破坏封装最佳实践。不要误会我的意思,我在你的代码库使用它作为合适的,只读只写类型的属性呢局部变化,但你有什么不愉快的经历与它与其他作家?
澄清:滥用的预期定义的确会被创建时,私有变量是适当的这样的属性的
解决方案
我已经看到了滥用(在我看来)。具体地,当显影剂将常写:
private readonly int foo;
public int Foo
{
get
{
return foo;
}
}
它们有时会写:
public int Foo { get; private set; }
是,它的短。是的,从外部类具有相同的外观 - 但我不认为这是一回事,因为后者的形式允许属性在同一类的其他地方进行设置。这也意味着,如果该属性未在构造函数中设置,并且该字段不是只读的CLR,有没有报警。这些细微的差别,但只是去第二个形式,因为它更简单,而忽略差异感觉就像滥用对我来说,即使是轻微的。
幸运的是,这是现在可作为C#6:
// Foo can only be set in the constructor, which corresponds to a direct field set
public int Foo { get; }
其他提示
没有“滥用”中根本就没有手动写入场;而且这是好事,鼓励通过属性的所有访问(不直接到外地)反正!
我知道的是具有二进制序列一个最大的问题>,它变得有点棘手改回常规现场没有使它的版本不兼容 - 但后来......用不同的串行;-p
这将是很好,如果有一个“合适的”只读变的,如果你没有需要使用:this()
男星链式结构上,但是....咩!
我还没有看到它的任何滥用。而且说实话,我真的不明白你的意思,因为我看不到这种语法怎么可能被滥用。
我不认为自动性能比任何的问候封装经常性差。
如果你的意思是,一些开发商利用公共的自动属性,而不是私人领域则这当然是错误的,休息封装..
不隶属于 StackOverflow