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 クラスですべてを行っており、正常に動作します。

今私がすべきことは、これら2つを一緒に追加することです
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

は 2 つの money 値を一緒に追加することになっているため、代わりにタイプの拡張メソッド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

まず、この行:

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 に答える
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 に答える