如何避免外部变化?

时间:2016-05-08 14:25:42

标签: c#

例如,我有一个班级

class Car
{
    Engine TheEngine {get; set;}
}

当我设置引擎时

Engine engine = new Engine();
Car.TheEngine = engine;

如果我改变引擎

engine.Change();

然后Car.TheEngine也改变了。如何获得更好的设计以避免副作用?

1 个答案:

答案 0 :(得分:1)

如果您公开mutator方法,那么根据定义,该实例可以进行变异。为了达到你想要的效果,让所有这些方法都返回一个新实例。

所以,这个:

{% if login_error %}
{{ login_error.messageKey }}
{% endif %}

<form action="{{ path('forum_login') }}" method="post">
<label for="username">Username</label>
<input type="text" id="username" name="_username" value="{{ last_username }}">
<label for="password">Password</label>
<input type="password" id="password" name="_password">
<input type="hidden" name="_target_path" value="{{ path('forum_admin') }}">
<button type="submit">Login</button>
</form>

应该改为看起来像这样:

public void Change()
{
    this.PropertyB++;
}