裏口からのC#実践入門

1-10 過剰に表現力がありすぎる型の利用

dynamicは使いどころが難しそう。
まだまだ自分にはとりあえず存在することだけは知っておいて、使わないという選択がよさそう。

using System;

namespace Uraguchi.Scene1
{
    class BaseShip
    {
        public int Males { get; protected set; }
    }

    class Submarine : BaseShip
    {
        public Submarine(int n)
        {
            Males = n;
        }
    }

    class Cruiser : BaseShip
    {
        public int Females { get; private set;}
        public Cruiser(int m, int i)
        {
            Males = m;
            Females = i;
        }
    }

    public class Tenshi10
    {
        public Tenshi10()
        {
            BaseShip[] list = { new Submarine(30), new Cruiser(10, 20) };
            int sum = 0;
            foreach(var item in list) {
                sum += item.Males;
            }
            Console.WriteLine("Males in ships are " + sum);
        }
    }
}

1-11 過剰に表現力が不足しすぎる型の利用

実際に基底クラスに無いメソッドを持つ特定のクラスだけをリストから抜き出して実行したい、というケースはあるのだろうか?
素人考えだと、とてもわかりにくい気がする。

using System;
using System.Linq;

namespace Uraguchi.Scene1
{
    class BaseTenshi11 {}
    class ExtendedTenshi11 : BaseTenshi11
    {
        public void SayIt()
        {
            Console.WriteLine("I am Extended!");
        }
    }

    public class Tenshi11
    {
        public static void Run()
        {
            BaseTenshi11[] array = { new BaseTenshi11(), new ExtendedTenshi11() };
            foreach(var item in array.OfType<ExtendedTenshi11>())
            {
                item.SayIt();
            }
        }
    }
}

1-12 意味がない構造体の利用

構造体は要素(?)が増えるとパフォーマンスが悪くなる。
ただ、こういう例ではよく見かけるけど、「1回分」で見ると無視できるケースもあると思うので、ケースバイケースかも。
また、この書籍は今まで読んだ範囲だと、説明したいところ以外は省略されているコードので、コードの意味は考えないようにしないといけない。
上から、ラマくん、アクマくん、テンシちゃん。
f:id:yossk:20150131194555j:plain