17

2つのコンストラクターを使用するC#のコードを読んでいます。1つは静的で、もう1つはパブリックです。これら2つのコンストラクターの違いは何ですか?そして、静的コンストラクターを使用する必要があるのは何ですか?

4

4 に答える 4

35

staticpublicは直交する概念です (つまり、互いに何の関係もありません)。

public単に、クラスのユーザーがそのコンストラクターを呼び出すことができることを意味します (たとえば、 とは対照的にprivate)。

staticメソッド (この場合はコンストラクター) がクラスのインスタンスではなく、「クラス自体」に属していることを意味します。特に、静的コンストラクターは、クラスが初めて使用されるときに自動的に呼び出されます。

さらに、静的コンストラクターを作成することはできません。publicまたはprivate、手動で呼び出すことができないためです。.NET ランタイム自体によってのみ呼び出されるため、マークを付けてpublicも意味がありません。

于 2010-06-08T07:29:28.217 に答える
26

静的コンストラクターは、クラスがインスタンス化される前に一度だけ実行されます。何かを 1 回だけ実行したい場合に使用します。良い例は Bus クラスです ( MSDN の記事で説明されているものに似ています):

public class Bus
{
    public static int busNo = 0;

    static Bus()
    {
        Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
    }

    public Bus()
    {
        busNo++;

        Console.WriteLine("Bus #{0} goes from the depot.", busNo);
    }
}


class Program
{
    static void Main(string[] args)
    {
        Bus busOne = new Bus();
        Bus busTwo = new Bus();
    }

    // Output:
    // Woey, it's a new day! Drivers are starting to work.
    // Bus #1 goes from the depot.
    // Bus #2 goes from the depot.
}
于 2010-06-08T07:40:12.683 に答える
3

静的コンストラクター... アプリケーション/アプリ ドメインの存続​​期間中に「1 回」呼び出されることが保証されています。一度だけ実行したいステートメントを含めることができます。

パブリック コンストラクター... 静的コンストラクターにアクセス修飾子を追加することはできないため、パブリック コンストラクターは、インスタンス コンストラクターについて話していることを意味します。インスタンス コンストラクターが public の場合、外部の世界はそのインスタンスを作成できます。その他のオプションは、Internal (ライブラリ内から呼び出すことができます)、Private (クラス内からのみ) です。

于 2010-06-08T07:30:56.220 に答える
0

Static constructor作成されたクラスの最初のインスタンスのみが呼び出されましたが、クラスpublic constructorのそのインスタンスが作成されるたびに呼び出されました。

静的コンストラクター

static 修飾子を使用して宣言されたコンストラクターは、静的コンストラクターです。静的コンストラクターは、静的データを初期化するため、またはクラスのライフサイクルで一度だけ実行する必要がある特定のアクションを実行するために使用されます。静的コンストラクターは、クラスで実行する最初のコード ブロックです。静的コンストラクターは、クラスのライフサイクルで一度だけ実行されます。自動的に呼び出されます。静的コンストラクターはパラメーターを取りません。指定子にはアクセスできません。直接呼び出されません。

インスタンスまたはパブリック コンストラクター

インスタンス コンストラクターは、インスタンス データの初期化に使用されます。インスタンス コンストラクターは、クラスのオブジェクトが作成されるたびに呼び出されます。明示的に呼び出されます。インスタンス コンストラクターはパラメーターを取ります。アクセス指定子があります。

私の情報源: C# の静的コンストラクターとインスタンス コンストラクター

于 2020-11-14T13:27:31.010 に答える