ホームページ > バックエンド開発 > C#.Net チュートリアル > C# での静的コンストラクターの用途は何ですか?

C# での静的コンストラクターの用途は何ですか?

WBOY
リリース: 2023-08-23 22:25:02
転載
901 人が閲覧しました

C# での静的コンストラクターの用途は何ですか?

静的コンストラクターは、静的データを初期化するか、特定の操作を実行するために使用されます。 翻訳する必要がある内容は次のとおりです。 最初の呼び出しの前に自動的に実行される操作 インスタンスが作成されたとき、または静的メンバーが参照されたとき。

静的コンストラクターは、アンマネージ コードのラッパー クラスを作成する場合に便利です。 コンストラクターが LoadLibrary メソッドを呼び出せるとき。静的コンストラクターについても同様です 実行時にチェックできない型パラメータを強制するのに便利な場所 制約はコンパイル時にチェックされます。

静的コンストラクターには次のプロパティがあります -

  • 静的コンストラクターはアクセス修飾子やパラメーターを受け入れません。

  • #クラスまたは構造体には、静的コンストラクターを 1 つだけ含めることができます。

  • 静的コンストラクターは継承またはオーバーロードできません。

  • 静的コンストラクターは直接呼び出すことはできませんが、他のメソッドを通じてのみ呼び出すことができます

  • 共通言語ランタイム (CLR)。自動的に呼び出されます。
  • ユーザーは、静的コンストラクターがいつ実行されるかを制御できません。 プログラム。

  • 静的コンストラクターは、クラスを初期化する前に自動的に呼び出されます。 最初のインスタンスが作成されるか、静的メンバーを参照します。静的な コンストラクターはインスタンス コンストラクターの前に実行されます。型の静的コンストラクター 静的メソッドがイベントまたはデリゲートに割り当てられ、呼び出されるときに呼び出されます。 割り当てられたときはそうではありません。静的フィールド変数初期化子が存在する場合 静的コンストラクターのクラスの場合、それらはテキストの順序で実行されます。 テキスト順に実行される静的コンストラクターを持つクラス これらは実行前のクラス宣言に表示されます。 静的フィールドを初期化するための静的コンストラクターを提供しない場合、すべての静的フィールドは最初のアクセス時に宣言された順序で自動的に初期化されます。

    フィールドは、C# のデフォルト値にリストされている値に初期化されます。 静的コンストラクターが例外をスローした場合、そのコンストラクターはランタイムによって呼び出されません。 2 回目では、型は存続期間中初期化されないままになります。 プログラムが実行されるアプリケーション ドメイン。最も一般的には、 静的コンストラクターがスローされると TypeInitializationException が発生する 型をインスタンス化できない、またはハンドルされない例外が発生した場合 静的コンストラクター。明示的に定義されていない暗黙的な静的コンストラクターの場合 ソースコードで定義されているため、トラブルシューティングにはチェックが必要になる場合があります 中間言語 (IL) コード。
  • 静的コンストラクターが存在すると追加が妨げられます BeforeFieldInit タイプのプロパティ。これにより、実行時の最適化が制限されます。

  • 静的読み取り専用として宣言されたフィールドは、その一部としてのみ割り当てることができます 宣言または静的コンストラクター内。明示的な静的コンストラクターがない場合 翻訳する必要がある内容は次のとおりです。必須、静的フィールドではなく、宣言時に静的フィールドを初期化します。 翻訳する必要がある内容は次のとおりです。必須、静的フィールドではなく、宣言時に静的フィールドを初期化します。 コンストラクターは、実行時の最適化を向上させるために使用されます。

  • リアルタイム デモンストレーション

    using System;
    namespace DemoApplication{
       public class Program{
          static void Main(string[] args){
             Car user = new Car();
             Car user1 = new Car();
             Console.ReadLine();
          }
       }
       public class Car{
          static Car(){
             Console.WriteLine("Static constructor called");
          }
          public Car(){
             Console.WriteLine("Default constructor called");
          }
       }
    }
    ログイン後にコピー

    出力

    Static constructor called
    Default constructor called
    Default constructor called
    ログイン後にコピー

    上記の例では、静的コンストラクターが呼び出されるのは一度だけです。

    オンライン デモンストレーション

    using System;
    using System.Threading;
    namespace DemoApplication{
       public class Car{
          protected static readonly DateTime globalStartTime;
          protected int RouteNumber { get; set; }
          static Car(){
             globalStartTime = DateTime.Now;
             Console.WriteLine($"Static constructor called. Global start time:
             {globalStartTime.ToLongTimeString()}");
          }
          public Car(int routeNum){
             RouteNumber = routeNum;
             Console.WriteLine($"Car {RouteNumber} is created.");
          }
          public void Drive(){
             TimeSpan elapsedTime = DateTime.Now - globalStartTime;
             Console.WriteLine($"Car {this.RouteNumber} is starting its route
             {elapsedTime.Milliseconds} minutes after global start time
             {globalStartTime.ToShortTimeString()}.");
          }
       }
       class TestCar{
          static void Main(){
             Car car1 = new Car(1);
             Car car2 = new Car(2);
             car1.Drive();
             Thread.Sleep(25);
             car2.Drive();
             Console.ReadLine();
          }
       }
    }
    ログイン後にコピー

    出力

    Static constructor called. Global start time:
    7:09:06 AM
    Car 1 is created.
    Car 2 is created.
    Car 1 is starting its route25 minutes after global start time7:09 AM.
    Car 2 is starting its route50 minutes after global start time7:09 AM.
    ログイン後にコピー

    以上がC# での静的コンストラクターの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    ソース:tutorialspoint.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート