読者です 読者をやめる 読者になる 読者になる

裏口からのC#実践入門

C# 裏口からのC#実践入門

1-21 readonly が使えるケースで普通の変数を使う

初期化構文 -> コンストラクタの処理順。

using System;

namespace Uraguchi
{
    public class Tenshi21
    {
        private readonly double x1 = 4989, x2 = 893, distance;

        public void Report()
        {
            Console.WriteLine("{0} と {1} の距離は {2} です。", x1, x2, distance);
        }

        public void OtherWork()
        {
            Console.WriteLine("他の仕事中だ。");

            // コンパイルエラー
            // x1 = 4989;
            // x2 = 893;
        }

        public Tenshi21(double x1, double x2)
        {
            this.x1 = x1;
            this.x2 = x2;
            this.distance = Math.Abs(x2 - x1);
        }

        public static void Run()
        {
            var tenshi21 = new Tenshi21(2, 5);
            tenshi21.OtherWork();
            tenshi21.Report();
        }
    }
}

1-22 列挙型を使わないで定数を定義する

数値自体に意味を持たない場合は列挙型を使う。
これはif文じゃなくてswitchを使うべきかな。

using System;

namespace Uraguchi.Scene1
{
    public enum Tenshi22Sex { Male, Female }
    public enum Tenshi22Age { Child, Adult }

    public class Tenshi22
    {
        public static void Report(Tenshi22Sex sex, Tenshi22Age age)
        {
            switch(sex)
            {
                case Tenshi22Sex.Male:
                    Console.WriteLine("俺は男だ。");
                    break;
                default:
                    Console.WriteLine("私は女よ。");
                    break;
            }

            switch(age)
            {
                case Tenshi22Age.Child:
                    Console.WriteLine("僕は子供だ。");
                    break;
                default:
                    Console.WriteLine("私は大人だ。");
                    break;
            }
        }

        public static void Run()
        {
            Report(Tenshi22Sex.Female, Tenshi22Age.Child);
            // コンパイルエラー
            // Report(Tenshi22Age.Adult, Tenshi22Sex.Male);
        }
    }
}