3

重複の可能性:
C#.NET-静的クラスのメンバーを静的として宣言する必要があるのはなぜですか?なぜそれは単に暗黙的ではないのですか?

静的に宣言されたクラス内からメソッド(静的として明示的に宣言していない)を呼び出すと、次のようなメッセージが表示されるという興味深いエラーが発生します。

非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です'MangoTree.Twitter.OAuthClient.PerformRequest(System.Collections.Generic.Dictionary、string、string、string、MangoTree.Twitter.OAuthClient.RequestType)'

メソッドを静的として明示的に宣言すると、エラーはなくなり、クラス宣言から静的修飾子を削除でき、エラーはなくなります。私を混乱させているのは、クラスを静的として宣言すると、明示的に宣言しなくても、クラス内のすべてが自動的に静的になるはずだという印象を受けたということです。

4

5 に答える 5

4

私を混乱させているのは、クラスを静的として宣言したときに、クラス内のすべてが自動的に静的である必要があるという印象を受けていたことです。

静的クラスのすべてのメンバーは確かに静的でなければなりませんが、自動的に行われるわけではありません。すべてのメンバーを明示的に静的に宣言する必要があります。クラスを static と宣言する目的は、すべてのメンバーが static であることをコンパイラがチェックできるようにし、静的クラスのインスタンスを作成しようとする試みを防ぐことです。

于 2012-07-13T04:49:46.000 に答える
1

静的クラスのすべてのメンバーは静的でなければなりません。

その理由はこちらの記事をお読みください。

http://www.codeproject.com/Articles/15269/Static-Keyword-Demystified

于 2012-07-13T04:47:31.047 に答える
0

C# コンパイラは、静的クラスを「封印された抽象」としてマークします。そのため、静的クラスをインスタンス化することも、静的クラスから継承することもできません。このため、クラスをインスタンス化することはできず、非静的メンバーを呼び出すことはできないため、静的クラスで非静的メンバーを定義しても実際の価値はありません。したがって、静的クラスには静的メンバーのみを定義する必要があります。クラスが静的であるべきかどうかは、設計上の決定事項です。

于 2012-07-13T04:53:23.447 に答える
0

C# で静的クラスを作成する場合は、内部のメソッドを静的に宣言する必要があります。

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

例:

static class CompanyInfo
{
    public static string GetCompanyName() { return "CompanyName"; }
    public static string GetCompanyAddress() { return "CompanyAddress"; }
    //...
}
于 2012-07-13T04:46:32.993 に答える
0

クラスのインスタンスを作成せずに非静的メンバー関数を呼び出すことはできません。したがって、最初のケースでは、静的クラスをインスタンス化できないため、静的関数から非静的関数を呼び出そうとするとエラーが発生します。

ただし、クラスが非静的で、1 つが静的であるメソッドが 2 つある場合、このように静的関数内で非静的メンバー関数を呼び出すことができます。

public class Foo
{
    public void Test()
    {
    }

    public static void Test1()
    {
         Foo foo = new Foo();
         foo.Test1();
    }
}

静的メンバーとクラスは通常のクラスをインスタンス化する前にインスタンス化されるため、静的関数は通常の関数の存在を認識しません。

2 番目のケースでは、両方の関数が静的に宣言されているため、問題はありません。

于 2012-07-13T04:48:25.350 に答える