【问题标题】:Binding data from function to bool variable [duplicate]将数据从函数绑定到布尔变量[重复]
【发布时间】:2014-05-14 23:10:21
【问题描述】:

我想实现一种机制,在我调用 set 函数时将 bool 变量更改为 true(我有几个 setter 函数)。示例代码:

private bool isSomethingChanged = false;

public void SetName(string _name)
{
    // change name
}

我不想在所有 setter 函数的末尾写:isSomethingChanged = true;。 我希望它自动发生。有可能吗?

【问题讨论】:

  • “自动”是什么意思??

标签: c#


【解决方案1】:

首先 - 在 setter 结束时简单地将 isSomethingChanged 设置为 true 是不够的 - 您还应该验证某些内容是否确实发生了变化。例如

public void SetName(string _name)
{
    if (name == _name) // check
       return;   

    name = _name;
    isSomethingChanged = true;
}

回到解决您的问题 - 没有内置功能可以在调用任何方法时自动设置某些变量。您可以为此使用代码生成。例如。你可以使用 AOP 框架 PostSharp。这是INotifyPropertyChanged 接口与这个框架的实现,它几乎和你想要的一样:AOP Implementation of INotifyPropertyChanged。唯一的区别是你应该设置变量值而不是引发事件。

【讨论】:

  • 你不能把它改写得不那么简单吗?喜欢:public void SetName(string _name) { if (name != _name) { name = _name; isSomethingChanged = true; }。我只是想避免“无用”return 声明。 :)
  • @Abbas 实际上没有区别。但我喜欢guard conditions 用于简单的单级代码识别,我也更喜欢正比较(等于)而不是负比较(不等于)-但这可能是品味问题:)
  • 我同意你的看法@SergeyBerezovskiy。 Abbas 建议的代码对我来说可读性较差,因为您最终可能会得到一个巨大的嵌套块。对我来说,方法的} } } } } } } } }-end 太可怕了..
  • @Default / SergeyBerezovskiy 好的,我同意你们两个。这可能确实更清洁。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2016-11-05
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
相关资源
最近更新 更多