Unity中的c#中的属性(Unity5) – 可以避免支持变量
使用Unity5(很难确切知道正在使用的c#/ Mono / .Net的版本),我们的属性完全如下:
private int _distance; public int Distance { private set { _distance = value; controls.Blahblah(_distance); } get { Debug.Log("hah!); return _distance; } }
但考虑一下c#中的新“自动属性” ,它们似乎就像
public int Distance {get; set;} // ?
但我不知道如何在getter / setter中“做点什么”?
或者换句话说,当“手动”制作一个属性时,有没有办法自动生成支持变量(以及方便 – 保持私有)?
要重复,因为这被标记为重复,我怎么能在getter / setter期间在自动Property idiom中“做东西”……
……或相反……
如果您编写自己的“手动”属性,如何隐藏,摆脱或自动供应支持者?
请注意,当然您或其他程序员可能会意外触摸_underscore支持变量: 是否有任何方法可以避免这种情况?
如果你想在getter / setter中“做某事”,除了只是分配到字段之外,你不能使用自动属性。 对于示例代码描述的用例,自动属性不是一个选项。 拥有明确的支持字段没有错。
如果您只有私有变量而没有任何其他逻辑,那么您可以使用自动属性。
Class Something something { public int Distance { private set { _distance = value; } get { return _distance; } } // Keep this at the end of the class // In visual studio you can collapse region and wont attract // attention/distracting in your editor. #region data members private int _distance; #endregion data members }
你可以用public int Distance {get; set;}
public int Distance {get; set;}
但是,如果您执行其他操作(如日志记录),则必须以传统方式编写它。
编辑
它的所有编码实践。 我通常将私有变量括在#region p ...#endregion
。 并且仅使用属性进行设置 – 距离并且从未使用_distance。 它更像是一种编码实践,而不是对你正在做的事情的实际修复。
我这样做的另一个原因是 – 在WPF中,每当我们设置属性时,我们都需要调用NotifyPropertyChanged事件。 如果我不使用属性名称,那将是一个错误。 所以这种习惯使用Properties而不是私有变量。
你不能让变量不可发现,只是将它们分组在一起以便于阅读,是的,这是人类强制实践。
自动属性不允许您在其中执行“任何操作”。 它们只是简写:
public int Distance { get { return _distance; } set { _distance = value; } } private int _distance = default(int);
在此属性中使用实际变量没有任何问题,它不会影响任何内容。
但要注意的一件事是,如果要在编辑器中编辑变量,则不能使用属性。 您需要公开一个公共字段:
public int Distance;
如果你的get和set需要像日志一样有额外的代码,你必须按照第一种方式实现它们,如果你只需要获取并设置值,那么自动实现的属性更好我的意思是第二种方法。