我的主要内容是:
static void Main(string[] args)
{
Money m1 = new Money(2315.99);
Money m2 = new Money(4000, 25);
Console.WriteLine(m1);
Console.WriteLine(m2);
Console.WriteLine(m1.IncrementMoney(m2));
}
public void IncrementMoney(Money x)
{
//what do I put in here?
}
所以
Money m1 = new Money(2315.99);
应该将2315.99变成“$ 2315.99”
和
Money m2 = new Money(4000, 25);
表格“$ 4000.25”
我在Money课程中完成了所有这些工作并且工作正常。
现在我应该做的是将这两个一起使用
m1.IncrementMoney(m2);
这是我的“金钱”课程
class Money
{
//instance variables
private int dollars;
private int cents;
double amount;
public int Dollars
{
get { return dollars; }
set
{
if (value > 0)
dollars = value;
}
}
public int Cents
{
get { return cents; }
set
{
if (value > 0)
cents = value;
}
}
public Money(int Dol, int Cen)
{
Dollars = Dol;
Cents = Cen;
double Dollar = Convert.ToDouble(Dollars);
double Cent = Convert.ToDouble(Cents);
amount = Dollar + (Cent / 100);
}
public Money(double am)
{
int dol = Convert.ToInt32(am);
if (dol > am)
Dollars = dol - 1;
else if (dol < am)
Dollars = dol;
//Dollars
double cen = am % 1;
cen = cen * 100;
Cents = Convert.ToInt32(cen);
//Cents
double Dollar = Convert.ToDouble(Dollars);
double Cent = Convert.ToDouble(Cents);
amount = Dollar + (Cent / 100);
}
//override ToString()
public override string ToString()
{
return string.Format("{0:c}", amount);
}
}//end class Money
但我不知道将什么放入IncrementMoney
方法。
请帮帮忙?
如果不是太麻烦,也许对它是如何工作有点了解?我真的很想知道。
很抱歉,如果我没有提供足够的信息,
如果有任何其他要求,请告诉我。
谢谢!
答案 0 :(得分:1)
由于IncrementMoney
应该将两个货币值加在一起,因此您的用法应该是Money
类型的extension method。这很好,因为扩展方法非常棒。这个网站上的一个常见笑话是,它们是一切的解决方案。
您的代码应类似于:
public static Money IncrementMoney(this Money x, Money y)
{
var totalCents = x.Cents + y.Cents;
var retCents = totalCents / 100;
var retDollars = x.Dollars + y.Dollars + (totalCents % 100)
return new Money(retDollars, retCents);
}
至于快速解释......
通过向第一个参数添加this
,我们告诉C#我们要编写扩展方法。这意味着我们正在编写的这个方法将挂起this
参数的类型(在本例中为Money
)并允许我们使用它,就像它始终在.NET框架中一样。扩展方法必须是静态的,因此您不能使用该修饰符。除此之外,您只需编写一种方法来完成您的任何操作,就像您通常那样!
我建议您将其命名为IncrementMoney
以外的其他内容。这不是很具描述性。 AddMoney
会更好。
顺便说一句,您也可以查看operator overloading。您可以调整我刚刚编写的内容,只需使用+
运算符执行完全相同的操作,如下所示:
public static Money operator +(Money x, Money y)
{
var totalCents = x.Cents + y.Cents;
var retCents = totalCents / 100;
var retDollars = x.Dollars + y.Dollars + (totalCents % 100)
return new Money(retDollars, retCents);
}
通过此定义,您只需转到m1 + m2
并将它们添加到一起。
答案 1 :(得分:0)
public void IncrementMoney(Money x)
{
this.Dollars += x.Dollars;
var newCents = this.Cents + x.Cents;
this.Cents = newCents % 100;
this.Dollars += newCents / 100;
}
我实际上将函数命名为Add
,因为您正在获取当前值并添加提供的值,并且不需要Money修饰符,因为它应该在Money类上并且接受Money对象
答案 2 :(得分:0)
首先,这一行:
Console.WriteLine(m1.IncrementMoney(m2));
表示IncrementMoney
应该返回一些内容,但现在它返回void
。
所以看起来应该是这样的:
public void IncrementMoney(ClassA x)
{
this.Value += x.Value;
}
然后显示:
ClassA m1 = new ClassA(2315.99);
ClassA m2 = new ClassA(4000, 25);
Console.WriteLine(m1);
Console.WriteLine(m2);
m1.IncrementMoney(m2);
Console.WriteLine(m1);