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
標準のテンプレートファイルは下記のようになっています。
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$
{
}
}
どなたかのお役に立てれば幸いです。