2018年5月24日木曜日

開発環境

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

コード

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 };
        Stack<Animal> animalsStack = new Stack<Animal>();
        Queue<Animal> animalsQueue = new Queue<Animal>();

        foreach (Animal animal in animals)
        {
            animalsStack.Push(animal);
            animalsQueue.Enqueue(animal);
        }

        Console.WriteLine("List");
        foreach (Animal animal in animals)
        {
            Console.WriteLine(animal);
        }
        Console.WriteLine("Stack");
        foreach (Animal animal in animalsStack)
        {
            Console.WriteLine(animal);
        }

        Console.WriteLine("Queue");
        foreach (Animal animal in animalsQueue)
        {
            Console.WriteLine(animal);
        }
    }
}
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();
    }
}

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

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

0 コメント:

コメントを投稿

関連コンテンツ