这两种方法的名称是什么?

本文关键字:是什么 两种 方法 | 更新日期: 2023-09-27 18:14:33

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

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

这两种方法的名称是什么?

想不出第一个,但第二个可能被称为无副作用,因为它不会改变状态。这与其说是你如何称呼它,不如说是对它行为的描述。

你可能会在并发语言中听到"副作用",Axum已经融入了这个概念。

例如,这个方法没有副作用:

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

然而这个方法不是:

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

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

除非你在考虑属性设置…

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

…我不认为有任何通用的术语来描述方法。对象中的大多数方法都会以某种方式使用内部状态——读或写。

你可以直接写

  • 实例方法
  • 静态方法

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

例如,一个属性访问方法可以很好地对一个没有存储为DateTime的假想属性执行以下操作。

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

派生的属性方法应该是:

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

我故意避免讨论什么应该是属性,什么应该是方法,理解这是在op发布的上下文中很好地定义的。

正如Adam所说,在这些方法中修改属性是一种引入副作用的好方法——最好坚持使用好名字(例如ModifyTotal),并且约定Get方法和属性Get(通常)不应该修改属性。