这两种方法的名称是什么?
本文关键字:是什么 两种 方法 | 更新日期: 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(通常)不应该修改属性。