这两种方法被称为什么?

时间:2011-11-15 10:19:39

标签: c# oop methods

有些方法会对对象的属性执行操作(不能想到一个例子),但有些方法实际上不会影响对象的属性,只返回一个值(例如DateTime.Add())。

我知道这是一个简单的问题,但我不知道如何引用这两种方法。

3 个答案:

答案 0 :(得分:4)

不能想到第一个,但第二个可能被称为无副作用,如it doesn't mutate state。并不是说你如何引用它,而是更多地描述它的行为。

你倾向于听到并发语言中使用的“副作用”,Axum将这个概念融入其中。

例如,此方法是无副作用的:

public string GetName()
{
    return "Adam";
}

这种方法不是:

public int GetTotal(int optionalValue = 0)
{
    _total += optionalValue;
    return _total;
}

它可能会将状态(在本例中为_total)变为方法调用的一部分。下次调用它时,由于方法调用本身,_total可能与上次相同或不同。

除非你在考虑财产制定者......

public string Name 
{
    set { _name = value; }
}

......我认为描述方法没有任何共同术语。对象中的大多数方法都会以某种方式使用内部状态 - 读取或写入。

答案 1 :(得分:2)

你可以简单地说

  • 实例方法
  • 静态方法

答案 2 :(得分:1)

属性访问方法派生属性方法是我过去用来区分的内容。

例如,对于未存储为DateTime的虚构属性,属性访问方法可能会执行以下操作。

DateTime GetOrderDateTime()
{
    return OrderDate.ConvertToDateTime();
}

派生属性方法是:

DateTime GetNextOrderDate()
{
    return GetOrderDate.AddOneMonth(...);
}

我故意避免讨论什么应该是属性,以及在OP的发布上下文中明确定义的理解应该是什么方法。

修改这些方法中的属性,正如Adam所说,这是引入副作用的好方法 - 最好坚持使用好名字(例如ModifyTotal)和Get方法和属性获取的约定永远不应该(通常)修改属性。