2012年10月23日火曜日

開発環境

『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第12章(演算子のオーバーロード)12.6(練習問題)練習12-2を解いてみる。

その他参考書籍

練習12-2.

コード

using System;

class Invoice
{
    private string vendor;
    private double amount;
    public Invoice(string vendor, double amount)
    {
        this.vendor = vendor;
        this.amount = amount;
    }
    public static Invoice operator +(Invoice lhs, Invoice rhs)
    {
        if (lhs.vendor == rhs.vendor)
        {
            return new Invoice(lhs.vendor, lhs.amount + rhs.amount);
        }
        return null;
    }
    public override string ToString()
    {
        return "Vendor: " + vendor + ", Amount: " + amount;
    }
    public static bool operator ==(Invoice lhs, Invoice rhs)
    {
        if (lhs.vendor == rhs.vendor && lhs.amount == rhs.amount)
        {
            return true;
        }
        return false;
    }
    public static bool operator !=(Invoice lhs, Invoice rhs)
    {
        return !(lhs == rhs);
    }
    public override bool Equals(object obj)
    {
        if (!(obj is Invoice))
        {
            return false;
        }
        return this == (Invoice)obj;
    }
    public override int GetHashCode()
    {
        return base.GetHashCode();
    }
}

class Tester
{
    public void Run()
    {
        Invoice yamato = new Invoice("yamato", 5);
        Invoice yamato1 = new Invoice("yamato", 5);
        Invoice yamato2 = new Invoice("yamato", 10);
        Invoice sagawa1 = new Invoice("sagawa", 5);
        Invoice sagawa2 = new Invoice("sagawa", 10);
        Console.WriteLine("{0}と同じかどうか", yamato);
        Invoice[] invoices = { yamato1, yamato2, sagawa1, sagawa2 };
        Console.WriteLine("==で調べる");
        foreach (Invoice item in invoices)
        {
            Console.WriteLine("{0}: {1}", item.ToString(), yamato == item);
        }
        Console.WriteLine("Equalsで調べる");
        foreach (Invoice item in invoices)
        {
            Console.WriteLine("{0}: {1}", item.ToString(), yamato.Equals(item));
        }
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

Vendor: yamato, Amount: 5と同じかどうか
==で調べる
Vendor: yamato, Amount: 5: True
Vendor: yamato, Amount: 10: False
Vendor: sagawa, Amount: 5: False
Vendor: sagawa, Amount: 10: False
Equalsで調べる
Vendor: yamato, Amount: 5: True
Vendor: yamato, Amount: 10: False
Vendor: sagawa, Amount: 5: False
Vendor: sagawa, Amount: 10: False
続行するには何かキーを押してください . . .

0 コメント:

コメントを投稿