让我们在这样的getter中创建一个对象:
public class Class1
{
public string Id { get; set; }
public string Oz { get; set; }
public string Poznamka { get; set; }
public Object object
{
get
{
// maybe some more code
return new Object { Id = Id, poznamla = Poznamka, Oz = OZ };
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者我应该创建一个将创建并返回对象的方法?
Mit*_*eat 22
是的,这是不好的做法.
理想情况下,getter不应该改变或创建任何东西(除了延迟加载,即使那时我认为它会导致代码不太清晰......).这样可以最大限度地降低无意识副作用的风险.
Ser*_*kov 16
属性看起来像字段,但它们是方法.众所周知,这会造成惊人的混乱.当程序员看到似乎正在访问字段的代码时,程序员做出的许多假设可能不适用于某个属性.因此,有一些常见的属性设计指南.
避免从属性getter返回不同的值.如果连续多次调用,则属性方法每次都可以返回不同的值; 每次返回相同的值.
属性方法可能需要额外的内存或返回对实际上不属于对象状态的内容的引用,因此修改返回的对象对原始对象没有影响; 查询字段始终返回对保证属于原始对象状态的对象的引用.使用返回副本的属性可能会让开发人员感到非常困惑,而且这种特性通常没有记录.
考虑不能将属性作为out或ref参数传递给方法; 一个领域可以.
避免长期逃避财产.属性方法可能需要很长时间才能执行; 现场访问总是立即完成.
避免从getter中抛出异常.
如果属性设置器抛出异常,请保留以前的值
避免可观察到的副作用.
允许以任何顺序设置属性,即使这会导致对象的临时无效状态.
来源
" 通过C#CLR ",杰弗里里希特.第9章智能定义属性
" 框架设计指南 "第2版,Brad Abrams,Krzysztof Cwalina,第5.2章财产设计