2018年5月23日水曜日

開発環境

初めてのC# 第2版 (Jesse Liberty (著)、Brian MacDonald (著)日向 俊二 (翻訳)、オライリージャパン)の14章(ジェネリックとコレクション)、14.6(練習問題)、練習14-2.を取り組んでみる。

コード

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        Cat cat1 = new Cat(10, "cat1");
        Cat cat2 = new Cat(30, "cat2");
        Dog dog1 = new Dog(20, "dog1");
        Dog dog2 = new Dog(40, "dog2");

        List<Animal> animals 
            = new List<Animal> { cat1, cat2, dog1, dog2 };

        Console.WriteLine("ソート前");
        foreach (var item in animals)
        {
            Console.WriteLine(item);
        }

        Console.WriteLine("ソート後");
        animals.Sort();

        foreach (var item in animals)
        {
            Console.WriteLine(item);
        }
    }
}
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 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();
    }
}

入出力結果(コマンドプロンプト)

ソート前
Cat: Name: cat1, Weight: 10
Cat: Name: cat2, Weight: 30
Dog: Name: dog1, Weight: 20
Dog: Name: dog2, Weight: 40
ソート後
Cat: Name: cat1, Weight: 10
Dog: Name: dog1, Weight: 20
Cat: Name: cat2, Weight: 30
Dog: Name: dog2, Weight: 40
続行するには何かキーを押してください . . .

0 コメント:

コメントを投稿