C# 2.0 から、静的クラス (static class) が使える (強制できる) ようになりました。そのクラスには、静的なメンバ (VB 的には、共有メンバ) しか含められないというものです。
さて、静的クラスとして定義されたクラスのメタ属性はどうなっているんでしょうか? 確認してみますと、面白いことに、abstract で sealed なクラスになっているのです。VB に置き換えると、MustInherit で、NotInheritable なクラスということです。便宜上とはいえ、おかしい感じがしますよね。
次のコードで確認してみましょう。
C# 2.0
namespace Namespace1 {
public static class Program {
private static void Main() {
System.Type oType = typeof(TMakiMakiLove);
System.Console.WriteLine("abstract = {0}", oType.IsAbstract);
System.Console.WriteLine("sealed = {0}", oType.IsSealed);
}
}
public static class TMakiMakiLove {
public static void MosaMosaAA() {
return;
}
}
}
出力結果
abstract = True
sealed = True
VB の場合「静的クラス」に対応するのは「モジュール」とされていますが、こちらとは、完全にイコールではない、ということがわかります。もちろん、J# (Java) の static クラスともイコールではありません。(こちらは、当然かw)
タイトルにあるような「静的クラス」という言葉は、混乱を招く なぁ、と。完全にイコールではないにしても「モジュール」と表現した方が、まだ良いかもしれません。
# でも、書くときは 'static class' と書かねばならない。