開発環境
- OS: Windows 10 Pro
- IDE(統合開発環境): Visual Studio Community 2017
初めてのC# 第2版 (Jesse Liberty (著)、Brian MacDonald (著)、日向 俊二 (翻訳)、オライリージャパン)の14章(ジェネリックとコレクション)、14.6(練習問題)、練習14-4.を取り組んでみる。
コード
using System;
using System.Collections.Generic;
class Program
{
public static void Display(List<Animal> animals)
{
foreach (Animal animal in animals)
{
Console.WriteLine(animal);
}
}
static void Main(string[] args)
{
Cat cat1 = new Cat(10, "cat1");
Cat cat2 = new Cat(30, "cat2");
Cat cat3 = new Cat(50, "cat3");
Dog dog1 = new Dog(20, "dog1");
Dog dog2 = new Dog(40, "dog2");
Dog dog3 = new Dog(60, "dog3");
List<Animal> animals =
new List<Animal> { cat1, cat2, dog1, dog2, cat3, dog3 };
Animal.AnimalComparer c =
new Animal.AnimalComparer();
Console.WriteLine("List");
Display(animals);
Console.WriteLine("ソート");
animals.Sort();
Display(animals);
Console.WriteLine("Name");
c.WhichComparison = Animal.AnimalComparer.ComparisonType.Name;
animals.Sort(c);
Display(animals);
Console.WriteLine("Weight");
c.WhichComparison = Animal.AnimalComparer.ComparisonType.Weight;
animals.Sort(c);
Display(animals);
}
}
public abstract class Animal:IComparable<Animal>
{
private float weight;
private string name;
public Animal(float weight, string name)
{
this.weight = weight;
this.name = name;
}
public abstract void Speak();
public abstract void Move();
public override string ToString()
{
return "Name: " + name + ", Weight: " + weight;
}
public int CompareTo(Animal other)
{
return this.weight.CompareTo(other.weight);
}
public int CompareTo(
Animal rhs, AnimalComparer.ComparisonType which)
{
switch (which)
{
case AnimalComparer.ComparisonType.Weight:
return this.weight.CompareTo(rhs.weight);
case AnimalComparer.ComparisonType.Name:
return this.name.CompareTo(rhs.name);
default:
break;
}
return 0;
}
public class AnimalComparer : IComparer<Animal>
{
public enum ComparisonType
{
Weight,
Name,
}
private ComparisonType whichComparison;
public int Compare(Animal x, Animal y)
{
return x.CompareTo(y, whichComparison);
}
public ComparisonType WhichComparison
{
get { return whichComparison; }
set { whichComparison = value; }
}
}
}
public class Cat : Animal
{
public Cat(float weight, string name) :
base(weight, name)
{
}
public override void Move()
{
Console.WriteLine("Cat: Move");
}
public override void Speak()
{
Console.WriteLine("Cat Speak");
}
public override string ToString()
{
return "Cat: " + base.ToString();
}
}
public class Dog : Animal
{
public Dog(float weight, string name) :
base(weight, name)
{
}
public override void Move()
{
Console.WriteLine("Dog Move");
}
public override void Speak()
{
Console.WriteLine("Dog Speak");
}
public override string ToString()
{
return "Dog: " + base.ToString();
}
}
入出力結果(コマンドプロンプト)
List Cat: Name: cat1, Weight: 10 Cat: Name: cat2, Weight: 30 Dog: Name: dog1, Weight: 20 Dog: Name: dog2, Weight: 40 Cat: Name: cat3, Weight: 50 Dog: Name: dog3, Weight: 60 ソート Cat: Name: cat1, Weight: 10 Dog: Name: dog1, Weight: 20 Cat: Name: cat2, Weight: 30 Dog: Name: dog2, Weight: 40 Cat: Name: cat3, Weight: 50 Dog: Name: dog3, Weight: 60 Name Cat: Name: cat1, Weight: 10 Cat: Name: cat2, Weight: 30 Cat: Name: cat3, Weight: 50 Dog: Name: dog1, Weight: 20 Dog: Name: dog2, Weight: 40 Dog: Name: dog3, Weight: 60 Weight Cat: Name: cat1, Weight: 10 Dog: Name: dog1, Weight: 20 Cat: Name: cat2, Weight: 30 Dog: Name: dog2, Weight: 40 Cat: Name: cat3, Weight: 50 Dog: Name: dog3, Weight: 60 続行するには何かキーを押してください . . .
0 コメント:
コメントを投稿