私はこれにひびを入れました、そしてこれをMSDNリファレンスで見つけることができませんが、それはオペラトロアがチェックできるようにタイプをインスタンス化することに依存しているように見えます。静的クラスはインスタンス化できないため(静的クラスはコンパイル時にプログラムスタック上に作成されたオブジェクトであるため)...
たとえば、以下を実行すると、次のエラーが発生します:「静的型の変数を宣言できません」
ExtensionMethods ex;
また、以下を実行すると、次のエラーが発生します:「静的クラスのインスタンスを作成できません」
ExtensionMethods ex2 = new ExtensionMethods();
この問題を実証するために、is演算子を示す完全なプログラムを次に示します。
static class ExtensionMethods { }
// notice non-static
class AnotherNonStaticExtensionMethod { }
class Program
{
static void Main(string[] args)
{
Debug.WriteLine(Test(new AnotherNonStaticExtensionMethod()).ToString());
Debug.WriteLine(Test("Test").ToString());
Debug.WriteLine(Test(4).ToString());
}
public static bool Test(object obj)
{
if (obj is ExtensionMethods)
{
return true;
}
else if (obj is AnotherNonStaticExtensionMethod)
{
return true;
}
else
{
return false;
}
}
}
次の出力があります。
True
False
False
isオブジェクトは、最初のステートメントでインスタンス化可能なクラスをチェックできます。したがって、is演算子はそれに依存していると私は信じています。誰かがこれを確認できるといいのですが?
NominSimの礼儀::
C#3.0仕様のセクション10.1.1.3から:
静的クラスにはクラスベース仕様(§10.1.4)を含めることはできず、基本クラスまたは実装されたインターフェイスのリストを明示的に指定することはできません。静的クラスは、オブジェクト型から暗黙的に継承します。