假设我们有 2 个类 Expense1
和 Expense2
。哪个类实现优于另一个,或者哪个被认为更接近面向对象?
我一直认为 Exp2.Calculate(1.5M,2)
比
exp1.Calculate()
并使用 exp1 类的属性作为计算方法所需的值。
费用1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Expense1
{
public decimal ExpenseValue { get; set; }
public int NumberOfItems { get; set; }
private decimal result;
public decimal Result
{
get
{
return this.NumberOfItems * this.ExpenseValue;
}
}
public void Calculate()
{
this.result = this.ExpenseValue * this.NumberOfItems;
}
public void expense1()
{
this.ExpenseValue = 0;
this.NumberOfItems = 0;
}
}
费用2
class Expense2
{
public decimal Calculate(decimal expenseValue, int numberOfItems)
{
return expenseValue * numberOfItems;
}
}
两个类的实现
class Program
{
static void Main(string[] args)
{
Expense1 exp1 = new Expense1();
exp1.NumberOfItems = 2;
exp1.ExpenseValue = 1.5M ;
exp1.Calculate();
Console.WriteLine("Expense1:" + exp1.Result.ToString());
Expense2 exp2 = new Expense2();
string result = string.Empty;
result = exp2.Calculate(1.5M,2).ToString();
Console.WriteLine("Expense2:" + result);
Console.ReadKey();
}
}
最佳答案
Expense2
更容易阅读和理解发生了什么,因为从调用中可以明显看出使用了哪些参数。
Expense1
可能会产生各种副作用,因为调用者可能会在调用 Calculate()
之前忘记设置用于计算的变量。
如果您需要访问用于稍后计算结果的值,您可以使用类似这样的东西
public class Expense {
public decimal ExpenseValue { get; private set; }
public int NumberOfItems { get; private set; }
public decimal Result { get; private set; }
public decimal Calculate(decimal expenseValue, int numberOfItems) {
ExpenseValue = expenseValue;
NumberOfItems = numberOfItems;
Result = ExpenseValue * NumberOfItems;
return Result;
}
public Expense() {
Calculate(0, 0);
}
}
这将允许 Expense
的内部状态在对象的生命周期内保持一致,并定义其Calculated
关于c# - 这是将数据传递给方法的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31695417/