0

我的主要内容是:

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方法中添加什么。
请帮忙?
如果不是太麻烦,也许对它的工作原理有一点了解?我真的很想知道。

抱歉,如果我没有提供足够的信息,
如果需要其他任何信息,请告诉我。
谢谢!

4

3 回答 3

1

由于IncrementMoney应该将两个货币值相加,因此您的用法看起来应该是该类型的扩展方法。Money这很好,因为扩展方法非常棒。这个网站上的一个常见笑话是它们是解决所有问题的方法。

您的代码应类似于:

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会更好。

顺便说一句,您还可以查看运算符重载。您可以修改我刚刚写的内容,以简单地使用+运算符来执行完全相同的操作,如下所示:

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将它们添加到一起。

于 2012-11-06T23:28:15.697 回答
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 对象

于 2012-11-06T23:05:35.407 回答
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);
于 2012-11-06T23:06:56.580 回答