プログラミング(Python、Perl、C、Go、JavaScript)、数学、読書…
開発環境
"初めてのC# 第2版"の第12章(演算子のオーバーロード)の12.6(練習問題)を解いてみる。
練習 12-1
using System; public class Invoice { private string vendor; private double amount; public Invoice(string vendor, double amount) { this.vendor = vendor; this.amount = amount; } public string Vendor { get { return vendor; } set { vendor = value; } } public double Amount { get { return amount; } set { amount = value; } } public static Invoice operator +(Invoice lhs, Invoice rhs) { if (lhs.Vendor == rhs.Vendor) { return new Invoice(lhs.Vendor, lhs.Amount + rhs.Amount); } return new Invoice("", 0); } } class Tester { public void Run() { Invoice invoice1 = new Invoice("Vendor", 1.2); Invoice invoice2 = new Invoice("Vendor", 2.3); Invoice invoice3 = new Invoice("Vendor1", 1.2); Invoice invoice4 = invoice1 + invoice2; Invoice invoice5 = invoice2 + invoice3; Invoice invoice6 = invoice3 + invoice1; Console.WriteLine( "invoice1 Vendor: {0} Amount:{1}", invoice1.Vendor, invoice1.Amount); Console.WriteLine( "invoice2 Vendor: {0} Amount:{1}", invoice2.Vendor, invoice2.Amount); Console.WriteLine( "invoice3 Vendor: {0} Amount:{1}", invoice3.Vendor, invoice3.Amount); Console.WriteLine( "invoice1+invoice2 Vendor: {0} Amount:{1}", invoice4.Vendor, invoice4.Amount); Console.WriteLine( "invoice2+invoice3 Vendor: {0} Amount:{1}", invoice5.Vendor, invoice5.Amount); Console.WriteLine( "invoice3+invoice1 Vendor: {0} Amount:{1}", invoice6.Vendor, invoice6.Amount); } static void Main() { Tester t = new Tester(); t.Run(); } }
出力結果
invoice1 Vendor: Vendor Amount:1.2 invoice2 Vendor: Vendor Amount:2.3 invoice3 Vendor: Vendor1 Amount:1.2 invoice1+invoice2 Vendor: Vendor Amount:3.5 invoice2+invoice3 Vendor: Amount:0 invoice3+invoice1 Vendor: Amount:0 続行するには何かキーを押してください . . .
練習 12-2
using System; public class Invoice { private string vendor; private double amount; public Invoice(string vendor, double amount) { this.vendor = vendor; this.amount = amount; } public string Vendor { get { return vendor; } set { vendor = value; } } public double Amount { get { return amount; } set { amount = value; } } 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 FieldAccessException)) { return false; } return this == (Invoice)obj; } public override int GetHashCode() { return base.GetHashCode(); } } class Tester { public void Run() { Invoice invoice = new Invoice("Vendor", 1.2); Invoice invoice1 = new Invoice("Vendor", 1.2); Invoice invoice2 = new Invoice("Vendor", 2.3); Invoice invoice3 = new Invoice("Vendor1", 1.2); Invoice invoice4 = new Invoice("Vendor1", 2.3); Console.WriteLine( "invoice Vendor: {0} Amount:{1}", invoice.Vendor, invoice.Amount); Console.WriteLine( "invoice1 Vendor: {0} Amount:{1}", invoice1.Vendor, invoice1.Amount); Console.WriteLine( "invoice2 Vendor: {0} Amount:{1}", invoice2.Vendor, invoice2.Amount); Console.WriteLine( "invoice3 Vendor: {0} Amount:{1}", invoice3.Vendor, invoice3.Amount); Console.WriteLine( "invoice4 Vendor: {0} Amount:{1}", invoice4.Vendor, invoice4.Amount); Console.WriteLine("invoice=invoice1 : {0}", invoice == invoice1); Console.WriteLine("invoice=invoice2 : {0}", invoice == invoice2); Console.WriteLine("invoice=invoice3 : {0}", invoice == invoice3); Console.WriteLine("invoice=invoice4 : {0}", invoice == invoice4); } static void Main() { Tester t = new Tester(); t.Run(); } }
invoice Vendor: Vendor Amount:1.2 invoice1 Vendor: Vendor Amount:1.2 invoice2 Vendor: Vendor Amount:2.3 invoice3 Vendor: Vendor1 Amount:1.2 invoice4 Vendor: Vendor1 Amount:2.3 invoice=invoice1 : True invoice=invoice2 : False invoice=invoice3 : False invoice=invoice4 : False 続行するには何かキーを押してください . . .
0 コメント:
コメントを投稿