より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

Use base class qualifierって意外と大事なアドバイスかも

f:id:rimever:20191117173145p:plain

ResharperやRiderが薦めてくる。Use base class qualifierについてです。

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // このコードに対して、A.GetKeyword()にすることを薦めてくる。
            Console.WriteLine(B.GetKeyword());
        }
        class A
        {
            public static string GetKeyword() => "a";
        }

        class B:A
        {
        }
    }
}

これって意味あるのかな、と思ったりもします。

確かに、Use base keywordと同じように揃えておいた方が良いか、とも思ったのですが、それよりは、こちらの方が意味のある修正です。

というのも拡張性が関わってきます。

このコードが

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine(B.GetKeyword());
        }
        class A
        {
            public static string GetKeyword() => "a";
        }

        class B:A
        {
            // !!!コードを追加
            public static string GetKeyword() => "b";
        }
    }
}

とメソッドを追加された時、別の結果になってしまいます。

f:id:rimever:20191117173436p:plain

この規模のコードだったら、そりゃそうでしょですが、大規模なコードであれば、修正した途端、思わぬところで被害が出る可能性があります。

だから、修正するのが怖いでは話にならないので、普段からマメに手入れをしておくことは重要ですね。