ホームページ  >  記事  >  バックエンド開発  >  C# の早期バインディングと遅延バインディングについての簡単な説明

C# の早期バインディングと遅延バインディングについての簡単な説明

青灯夜游
青灯夜游オリジナル
2019-01-31 15:27:033530ブラウズ

オブジェクトをオブジェクト変数に代入する際、コンパイラはバインディングと呼ばれる処理を実行します。 C# は、早期バインディングと遅延バインディングという 2 つの異なるタイプのバインディングを実行します。この2つのバインディングについては以下の記事で紹介していますので、ご参考になれば幸いです。

C# の早期バインディングと遅延バインディングについての簡単な説明

#早期バインディング

早期バインディングは静的バインディングとも呼ばれ、コンパイル時のバインディングを指します。定義済み; 早期バインド オブジェクトは、基本的に、厳密に型指定されたオブジェクトまたは静的に型指定されたオブジェクトです。 [チュートリアルの推奨事項:

C# ビデオ チュートリアル ]

早期バインディングは、コンパイル中にメソッド、プロパティ、関数を識別してチェックし、アプリケーションの実行前にその他の最適化を実行します。このバインディングでは、コンパイラーはオブジェクトのタイプと、そのオブジェクトがどのようなメソッドまたはプロパティを持っているかをすでに認識しています。

早期バインディングの利点

1. 高速パフォーマンス

2. コーディングと開発が簡単

3. 数の削減実行時エラー

例:

using System; 
  
class People { 
  
    // data members 
    public string name; 
    public string subject; 
  
    // public method 
    public void details(string name, string subject) 
    { 
        this.name = name; 
        this.subject = subject; 
        Console.WriteLine("我的名字是: " + name); 
        Console.WriteLine("我最喜欢的科目是: " + subject); 
    } 
} 
  
class GFG { 
  
    // Main 方法
    static void Main(string[] args) 
    { 
  
        // 创建People类的对象
        People g = new People(); 
  
        // 调用People类的方法 
        g.details("Ankita", "C#"); 
  
        // 调用“myMethod()”时出错
        // 因为这个方法不属于People类,或者编译器在编译时不知道mymethod()
        g.mymethod(); 
    } 
}

コンパイル中にエラーが発生しました:

C# の早期バインディングと遅延バインディングについての簡単な説明

説明:上記の例には、People というクラスがあります。このクラスには、details() メソッドが含まれています。ここで、コンパイラは People に存在するプロパティとメソッドをすでに認識しています。しかし、mymethod() を呼び出そうとすると、コンパイラはこのメソッドを認識しないため、エラーがスローされます。

遅延バインディング

遅延バインディングは動的バインディングとも呼ばれます。遅延バインディングでは、コンパイラーはオブジェクトがどのようなタイプであるか、またどのようなメソッドやプロパティを持っているかを知りません。ここではオブジェクトは動的オブジェクトです。オブジェクトのタイプは、実行時に右側に保持されるデータに基づいて決定されます。基本的に、遅延バインディングは仮想メソッドを使用して実現されます。

遅延バインディングの最大の利点は、このタイプのオブジェクトが任意のオブジェクトへの参照を保持できることですが、早期バインディング オブジェクトの利点の多くが欠けています。たとえば、遅延バインディングは実行時に検索が必要なため、早期バインディングよりも実行が遅くなります。

例:

using System; 
  
class GFG { 
    static void Main() 
    { 
        // Dynamic objects 
        dynamic obj = 4; 
        dynamic obj1 = 5.678; 
  
        // 显示对象的类型
        Console.WriteLine("对象类型为:"); 
  
        // 使用getType()方法来获取类型
        Console.WriteLine(obj.GetType()); 
        Console.WriteLine(obj1.GetType()); 
    } 
}

出力:

C# の早期バインディングと遅延バインディングについての簡単な説明

説明:

上記の例では、obj には integer 型のデータが格納され、obj1 には double 型のデータが格納されます。ただし、コンパイラはコンパイル時にこれらの問題を解決しません。実行時に、これらの動的オブジェクトが検出され、それぞれ System.Int32 および System.Double に変換されます。これが、実行時解決プロセスが遅延バインディングと呼ばれる理由です。

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がC# の早期バインディングと遅延バインディングについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。