Visual Studio のクラステンプレートで標準のアクセス修飾子を public にする

こんにちは、kenzauros です。今回は Visual Studio の小ネタです。
C# でソリューションエクスプローラーから “追加” → “クラス(C)…” とすると、下記のようなクラスが生成されます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IntelligentViewer
{
    internal class Class1
    {
    }
}これでなにが不満だと言われそうですが、個人的には 「アクセス修飾子が internal」 なのが不便です。たとえばライブラリーを作っている場合なんかはほとんどが公開クラスですので、いちいち public に書き換えるのが面倒です。
そこでクラスファイルのテンプレートを書き換えることで、デフォルトのアクセス修飾子を public にしてしまいましょう、というお話です。
クラスファイルのテンプレートを書き換える
クラスファイルのテンプレートはどこにあるのかというと下記のような樹海の奥にあります。 <Edition> 部分は Professional とか Community とかが入ります。
- Visual Studio 2022:C:\Program Files\Microsoft Visual Studio\2022\<Edition>\Common7\IDE\ItemTemplates\CSharp\Code\1041\Class\Class.cs
- Visual Studio 2019:C:\Program Files (x86)\Microsoft Visual Studio\2019\<Edition>\Common7\IDE\ItemTemplates\CSharp\Code\1041\Class\Class.cs
2022 Community エディションの場合のテンプレートの在処 
  
    
    
標準のテンプレートファイルは下記のようになっています。
using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    class $safeitemrootname$
    {
    }
}はて、 internal の記載がないですね…このファイルじゃないのか…?と思いますが、安心してください。このファイルです。
下記のようにアクセス修飾子を public に変更してみます。ちなみに変更には管理者権限が必要です。
using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    public class $safeitemrootname$    {
    }
}これを保存した状態で Visual Studio から再度クラスを追加してみると…見事、 public class が生成されました!
internal がどこからきたのか疑問ではありますが、細かいことは気にしないでおきましょう。
さらに自分好みにカスタムする
そのほかにも不要な using を削除したり、 XML ドキュメントコメントを追加したり、カスタムしておくと手間が省けます。
どれもほんの少しの時間ですが、チリツモです。
ということで、私は最終的に下記のようにしています。
namespace $rootnamespace$
{
    /// <summary>
    /// 
    /// </summary>
    public class $safeitemrootname$
    {
    }
}どなたかのお役に立てれば幸いです。



 
  
