.NET アプリケーションの種類。 .NET Framework の基本概念を理解する 共通言語仕様 (CLS) の目的は何ですか

14.09.2022

.NET Framework は、新世代のアプリケーションと XML Web サービスの作成と実行をサポートする統合 Windows コンポーネントです。 .NET Framework は、次の目標を念頭に置いて設計されました。

· オブジェクト コードをローカルに保存して実行したり、インターネット上に配布されたコードをローカルで実行したり、リモートで実行したりするための、一貫したオブジェクト指向プログラミング環境を提供します。

· ソフトウェアの展開とバージョン管理における競合を最小限に抑えるコード実行環境を提供します。

· 未知のサードパーティまたは完全に信頼されていないサードパーティによって生成されたコードを含む、コードの安全な実行を保証するコード実行環境を提供します。

· スクリプトまたは解釈されたコード実行環境によるパフォーマンスの問題を回避するコード実行環境を提供します。

· Windows アプリケーションや Web アプリケーションなど、さまざまな種類のアプリケーションにわたって一貫した開発者エクスペリエンスを提供します。

· .NET Framework コードが他のコードと確実に統合できるように、業界標準ベースの相互運用性を開発します。

.NET Framework の 2 つの主なコンポーネントは、共通言語ランタイム (CLR) と .NET Framework クラス ライブラリです。 .NET Framework の中核は CLR です。 ランタイムは、実行時にコードを管理し、メモリ管理、スレッド管理、リモート処理などの基本サービスを提供するエージェントと考えることができます。 同時に、安全性と信頼性を確保するために、厳格なタイピング条件やコードの正確性のその他の種類の検証が課されます。 実際、ランタイムの主な仕事はコードを管理することです。 ランタイムにアクセスするコードはマネージド コードと呼ばれ、ランタイムにアクセスしないコードはアンマネージド コードと呼ばれます。 .NET Framework のもう 1 つのコア コンポーネントであるクラス ライブラリは、コマンド ラインまたはグラフィカル ユーザー インターフェイスから実行される従来のものから、 Web フォームや XML Web サービスなどの最新の ASP.NET テクノロジ機能。

.NET Framework は、共通言語ランタイム (CLR) を独自のプロセスに読み込んでマネージ コードの実行を実行するアンマネージ コンポーネントをホストでき、それによってマネージとアンマネージの両方の実行を可能にするプログラミング環境を作成できます。 .NET Framework は、いくつかのコア ランタイムを提供するだけでなく、コア ランタイムのサードパーティ開発もサポートします。


たとえば、ASP.NET はランタイムをホストして、マネージ コード用のスケーラブルなサーバー側環境を提供します。 ASP.NET はランタイムと直接連携して、ASP.NET アプリケーションと XML Web サービスを有効にします。これらについては、このトピックで後ほど説明します。

Internet Explorer は、ランタイム (MIME タイプ拡張子の形式) をホストするアンマネージ アプリケーションの一例です。 Internet Explorer を使用してランタイムをホストすると、マネージド コンポーネントまたは Windows フォーム コントロールを HTML ドキュメントに埋め込むことができます。 この方法でランタイムをホストすると、マネージド モバイル コード (Microsoft® ActiveX® コントロールと同様) が可能になりますが、半信頼された実行や分離されたファイル ストレージなど、マネージド コードのみが提供できる大幅な改善が加えられています。

次の図は、共通言語ランタイムとクラス ライブラリとアプリケーションおよびシステム全体との関係を示しています。 この図は、マネージド コードが大規模なアーキテクチャ内でどのように動作するかも示しています。

NET Framework のコンテキスト

次のセクションでは、.NET Framework の主要なコンポーネントと機能について詳しく説明します。


たとえば、ASP.NET はランタイムをホストし、サーバー側のマネージ コードにスケーラブルな環境を提供します。 ASP.NET はランタイムと直接連携して、このトピックで後述する ASP.NET アプリケーションと XML Web サービスの実行を可能にします。

Internet Explorer は、ランタイム (MIME タイプ拡張子の形式) をホストするアンマネージ アプリケーションの一例です。 Internet Explorer でランタイムをホストすると、マネージド コンポーネントまたは Windows フォーム コントロールを HTML ドキュメントに埋め込むことができます。 この環境レイアウトにより、マネージド モバイル コード (Microsoft® ActiveX® コントロールと同様) を実行できるようになりますが、部分信頼の実行や分離されたファイル ストレージなど、マネージド コードの大きな利点も得られます。

次の図は、共通言語ランタイムとクラス ライブラリがユーザー アプリケーションおよびシステム全体とどのように対話するかを示しています。 この図は、より広範なアーキテクチャ内でマネージ コードがどのように動作するかも示しています。

NET Framework のコンテキスト

次のセクションでは、.NET Framework のコア コンポーネントと機能について詳しく説明します。

これは、現在最も人気があり、多機能で、活発に開発されているプログラミング言語の 1 つです。 その助けを借りて、単純な Win フォームから始めて、ほぼすべてのソフトウェアを開発できます。 アプリケーションから、大規模なクライアントサーバー Web アプリケーション、さらにはモバイル アプリケーションやコンピューター ゲームまで。また、.NET Framework プラットフォームに基づいて動作します。 それが何なのか考えてみましょう。

.NET Framework と C# の CLR ランタイムに関する私のビデオをご覧ください。

C# プログラミング言語比較的新しいサービスですが、すでに信頼を得ています。 最初のバージョンのリリースは 2002 年 2 月に行われました。 執筆時点での言語の最新バージョンは C# 7.2 で、2017 年 8 月 16 日にリリースされました。

C# 言語の構文は、名前が示すように、C 系言語ファミリーの一部であり、このグループの他の一般的な言語 (C++、Java) に似ています。 したがって、これらの言語のいずれかにすでに慣れている場合は、C# プログラミング言語を習得するのがはるかに簡単になります。

C# はオブジェクト指向言語であるため、継承、ポリモーフィズム、カプセル化、強力な変数の型指定、演算子のオーバーロードなどをサポートしています。 これらすべての概念については、以降の記事で詳しく説明します。 プログラミング言語を使用したオブジェクト指向設計パラダイムのおかげで、大規模かつ柔軟なプロジェクトを開発することが非常に簡単になります。 同時に、C# 言語の新しいバージョンが定期的にリリースされ、開発者の作業を簡素化し、開発速度を向上させ、アプリケーションのパフォーマンスと信頼性を向上させる新機能が追加されています。

.NETプラットフォーム

。ネットフレームワーク 同社のソフトウェアプラットフォームですマイクロソフト すべての言語が単一の共通言語実行環境を使用するため、さまざまなプログラミング言語での開発が可能共通言語ランタイム (CLR)。 したがって、.NET プラットフォームの主な機能は次のとおりです。

  • クロスプラットフォーム- 。ネットフレームワーク ほとんどの最新のオペレーティング システムでサポートされています Windows、Linux システムでサポートされるアプリケーション、さらにはモバイル アプリケーションを作成することもできます。
  • 多言語対応– 使用するプログラミング言語で記述されたソース コードは共通中間言語 (CIL) コードに変換されるため、サポートされている任意のプログラミング言語で開発することが可能になり、1 つのソリューションで異なるプログラミング言語を使用することもできます。 サポートされている最も一般的な言語は、C#、VB.NET、C++、F# です。
  • クラスとテクノロジーの広範なライブラリ– 必要な問題を解決するために、すぐに使用できるライブラリが多数あります。 多くの場合、アプリケーションの低レベル ロジックを実装する必要はまったくなく、nuget パッケージ マネージャーを通じて便利に提供される既製のソリューションを使用するだけで十分です。 さらに、.NET プラットフォームを使用すると、必要なほぼすべての種類のソフトウェアを簡単に開発できます。

マネージド コードとアンマネージド コード。 JITコンパイル

マネージドコード共通言語ランタイム (CLR) によって管理されるコードです。 これは、制御環境がアプリケーションの実行を一時停止し、実行中にいつでもアプリケーションの状態に関する特定の情報を取得できることを意味します。 使用されるプログラミング言語のソース コードは、制御された CIL コード (高レベル アセンブラとも呼ばれます) に変換されます。

クラス ライブラリまたはアプリケーションを作成した後、ソース コードは引き続き CIL に保存されます。 そして、アプリケーションを起動したり、ライブラリにアクセスすると、ジャストインタイムが実行されます( ジット) アプリケーションを、アプリケーションが実行される環境に固有のマシンコードにコンパイルすること。 この場合、重要な特徴は、アクセスされるアプリケーションまたはライブラリの部分 (もちろん接続) のみがコンパイルされることです。 これにより、システムのパフォーマンスが向上し、リソースが節約されます。

アンマネージコード- これは、マシン実行可能コードに直接変換され、オペレーティング システムによって直接実行されるコードです。

さらに、記事を読むことをお勧めします。 また、VKontakte グループ、Telegram、YouTube チャンネルにも登録してください。 プログラマーにとってさらに便利で興味深いものがあります。

NET Framework は、コンポーネント (コントロール) に基づく分散アプリケーションをサポート、開発、実行するための環境として機能します。

アプリケーション(プログラム)は、このテクノロジーをサポートするさまざまなプログラミング言語で開発できます。

NET Framework は以下を提供します。

  • 異なるプログラミング言語の共同使用。
  • プログラムのセキュリティと移植性。
  • Windows プラットフォームに基づく一般的なプログラミング モデル。

2. .NET Framework の主なコンポーネントは何ですか?

プログラミングの観点から見ると、.NET Framework は 2 つの主要コンポーネントで構成されます。

  • 共通言語実行環境 CLR (Common Language Runtime)。
  • 基本クラスのライブラリ。

共通言語ランタイム (CLR) は、.NET 型の自動検出、それらの型の読み込み、および管理の問題を解決します。 CLR はメモリ管理、アプリケーションのメンテナンス、スレッド処理を処理し、多数のセキュリティ関連のチェックを実装します。

基本クラスのライブラリには、ストリーム、グラフィカル API、データベース実装、ファイル I/O などのさまざまなプリミティブの定義が含まれています。

3. 共通言語ランタイム (CLR) の動作原理は何ですか?

共通言語ランタイム (CLR) は、.NET コードの実行を管理します。

C# (または別の言語) でプログラムをコンパイルした後、特殊な種類の疑似コードまたはバイトコードを含むファイルが作成されます (以前のように実行可能ファイルではありません)。 この疑似コードは (MSIL) または共通中間言語 (CIL) と呼ばれます。 この疑似コードは Microsoft 中間言語です。

CLR の主な目的は、プログラムの実行中に中間 MSIL コードを実行可能コードに変換することです。

MSIL 疑似コードにコンパイルされたプログラムは、CLR の実装が含まれる任意の環境で実行できます。 これにより、プログラムを .NET Framework 内で移植できるようになります。

米。 1. ソース コードを MSIL (CIL または IL) コードに変換し、アセンブリ ファイル (*.dll または *.exe) を作成するプロセス

この後、疑似コードは実行可能コードに変わります。 これは JIT コンパイラーによって行われます。 JIT (Just-in-time) コンパイルは、オンザフライでコンパイルされます。

CLR は、アセンブリを配置する場所を決定する責任があります。

アセンブリに配置される要求された型 (ArrayList クラスやその他の型など) は、バイナリ ファイル (*.dll または *.exe) のメタデータを読み取ることによって決定されます。

次に、CLR はアセンブリから読み取った型をメモリに配置します。

CLR は、CIL コードを特定のプラットフォーム (PC、オペレーティング システムなどに応じて) に合わせた適切な命令に変換します。 さらに、この段階で必要な安全性チェックが行われます。

最後に行うことは、要求されたプログラム コードを実行することです。

4. MSIL中間言語とは( Microsoft 中間言語) または CIL (共通中間言語)?

最初に中間疑似コード言語と呼ばれたものは、 Microsoft 中間言語(MSIL)。 その後 (.NET の最新バージョンでは)、この名前は共通中間言語 (CIL - Common Intermediate Language) に変更されました。 MSIL、CIL、および IL (Intermediate Language) の略語は同じ意味です。

中間言語 CIL (または MSIL) は、.NET Framework をサポートするプログラミング言語でプログラムをコンパイルした後に形成されます。

MSIL は擬似コードです。 MSIL は、次のような一連の命令を定義します。

  • 異なるプラットフォームに転送できます。
  • 特定のプロセッサに依存しません。

実際、MSIL は 移植可能なアセンブリ言語

5. .NET テクノロジの観点から見たアセンブリとは何ですか?

アセンブリは、.NET プラットフォームに依存しない中間言語 (IL) 命令と型メタデータを含む *.dll または *.exe 拡張子を持つファイルです。

アセンブリは .NET コンパイラを使用して作成されます。 アセンブリは大きなバイナリ オブジェクトです。

アセンブリは名前空間を保持するように設計されています。 名前空間には型が含まれます。 型には、クラス、デリゲート、インターフェイス、列挙型、構造体があります。

アセンブリには、任意の数の名前空間を含めることができます。 どの名前空間にも、任意の数の型 (クラス、インターフェイス、構造体、列挙、デリゲート) を含めることができます。

6. アセンブリには何が含まれますか?

アセンブリには、CIL コード (MSIL コードまたは IL コード) とメタデータが含まれています。

CIL コードは、.NET ランタイム環境からアクセスされる場合にのみ、特定のプラットフォーム用にコンパイルされます。

メタデータは、特定の .NET バイナリ ユニット内に存在する各タイプの機能を詳細に記述します。

例えば C# で Windows フォーム アプリケーションを作成すると、Assembly.info ファイルが作成されます。 このファイルは、メイン プログラム フォルダーに対して相対的な Properties サブフォルダーにあります。 このファイルは、アセンブリに関する一般的な情報を提供します。

7. マニフェストとは何ですか?

マニフェストメタデータを使用したアセンブリ自体の説明です。

マニフェストには次の情報が含まれています。

  • アセンブリの現在のバージョンについて。
  • 文化に関する情報 (ラインおよびグラフィックリソースのローカライズ)。
  • 適切に機能するために必要なすべての外部アセンブリへのリンクのリスト。

8. ソース コード、.NET コンパイラー、および .NET ランタイム エンジン間の相互作用の図。

プログラマは、.NET テクノロジ (C#、C++/CLI、Visual Basic .NET など) をサポートする言語でアプリケーションのソース コードを作成します。 アプリケーションは、Microsoft Visual Studio などのプログラミング環境で作成されます。 コンパイラはアセンブリ、つまり CIL 命令、メタデータ、マニフェストを含むファイルを生成します。

このアプリケーションを特定のコンピューター (特定のプラットフォーム) で実行すると、.NET ランタイム エンジンが起動します。 まず、.NET Framework の (少なくとも) バージョンの 1 つがコンピューターにインストールされている必要があります。

ソース コードで基本クラス ライブラリ (mscorlib.dll アセンブリなど) が使用されている場合、それらはクラス ローダーを使用してロードされます。

JIT コンパイラーは、アプリケーションが実行されているコンピューターのハードウェア機能とソフトウェア機能を考慮 (リンク) してアセンブリをコンパイルします。

この後、アプリケーションが実行されます。

図 2. ソース コード、コンパイラ、.NET ランタイム エンジンの関係

9. アセンブリにはどのような種類がありますか?

アセンブリには次の 2 種類があります。

  • 単一ファイルのアセンブリ。
  • 複数ファイルのアセンブリ。

1 つの単一モジュール (*.dll または *.exe) で構成されるアセンブリは、単一ファイルと呼ばれます。 単一ファイル アセンブリでは、必要なすべての CIL 命令、メタデータ、マニフェストが 1 つの明確に定義されたパッケージに配置されます。

多数の .NET バイナリ コード ファイルで構成されるアセンブリは、マルチファイル アセンブリと呼ばれます。 これらの各ファイルはモジュールと呼ばれます。

マルチファイル アセンブリでは、モジュールの 1 つがメイン (プライマリ) になります。

10. MS Visual Studio ライブラリのメイン アセンブリが含まれているファイルはどれですか?

メイン アセンブリはファイル「mscorlib.dll」にあります。

11. 一般的な CTS タイプ システムとは何ですか?

CTS (Common Type System) - 共通言語ランタイム CLR でサポートされるすべての可能なデータ型とプログラム構造の完全な説明を含む型システム。 また、これらのエンティティがどのように相互作用できるかについても説明します。

型には、クラス、インターフェイス、構造体、列挙、デリゲートがあります。

12. 共通言語仕様 CLS の目的は何ですか?

ご存知のとおり、.NET と互換性のあるすべてのプログラミング言語が CTS 型システムの機能をサポートできるわけではありません。 この目的のために、共通言語仕様 CLS (Common Language Supplement) が使用されます。

CLS の目的は、.NET をサポートするすべてのプログラミング言語で受け入れられる、一般的な型とプログラミング構造のサブセットのみを記述することです。

13. .NET テクノロジをサポートするプログラミング言語は何ですか?

MS Visual Studio アプリケーション開発システムでは、.NET テクノロジは、C#、Visual Basic .NET、C++/CLI、JScript .NET、F#、J# のプログラミング言語でサポートされています。

.NET テクノロジを使用できるようにするには、コンピュータにソフトウェアをインストールする必要があります Microsoft .NET Framework ソフトウェア開発キット(SDK) または任意のバージョンの Microsoft Visual Studio。

14. 名前空間とは何ですか?

名前空間は、意味論的な観点から相互に関連する型のグループを統合することを目的としています。 型はアセンブリ (アセンブリ) に配置されます。 型とは、クラス、デリゲート、インターフェイス、構造体、列挙体を意味します。

名前空間名の例:

システム システム.データ System.IO システムコレクション システム.スレッディング.タスク

たとえば、System.Data 名前空間にはデータベースを操作するための主要な型が含まれており、System.Collections 名前空間にはコレクションを操作するための主要な型が含まれています。

15. MS Visual Studio でアセンブリ、名前空間、型の内容を表示するにはどうすればよいですか?

Microsoft Visual Studio システムには、[表示] メニューから呼び出すユーティリティ オブジェクト ブラウザがあります (図 3)。

米。 3. オブジェクト ブラウザ ユーティリティの呼び出し

これにより、オブジェクト ブラウザー ウィンドウが開き、特定のテクノロジで使用されるアセンブリが表示されます。

図 4 は、「.NET Framework 4」テクノロジで表示されるアセンブリの一覧を示しています。 「mscorlib」という名前のアセンブリが強調表示されます。

米。 4. mscorlib.dll アセンブリが強調表示されたオブジェクト ブラウザ ウィンドウ

mscorlib アセンブリの内容を展開すると (「 + ") を選択すると、このアセンブリのすべての名前空間のリストが表示されます (図 5)。 図からわかるように、アセンブリには Microsoft.Win32、System、System.Collections、System.Collections.Concurrent などの名前空間が含まれています。

米。 5. mscorlib アセンブリとそれに含まれる名前空間のリスト

どの名前空間も同じ方法で展開されます。 名前空間はタイプを説明します。 型はメソッド、プロパティ、定数などを記述します。

図 6 は、System.IO 名前空間の BinaryReader クラスを示しています。 どうやら、このクラスは BinaryReader()、Close()、Dispose()、FillBuffer() などのメソッドを実装しているようです。

米。 6. BinaryReader クラスの内容

16. C# プログラムで名前空間を接続するにはどうすればよいですか?

名前空間を接続するには、using キーワードを使用します

全てにおいて良い日。 アレクセイ・グリニンから連絡があります。 C# に関する最初の記事では、プラットフォームについて話したいと思います。 。ネットフレームワーク。 C# 言語とプラットフォーム自体は 2002 年に初めて登場しました。 これらの作成の主な目的は、COM プログラミング モデルと比較して、よりシンプルでスケーラブルで、最も重要なことに、より強力なプログラミング モデルを提供することでした。 .NET Framework プラットフォームに基づいて、Windows ファミリのオペレーティング システム用のアプリケーションを構築できるほか、Unix、Linux、Mac OS X 用のアプリケーションも構築できます。 .NET Framework でサポートされる機能のリスト:

1) 既存のコードを操作する機能。 この機能を使用すると、COM バイナリ コンポーネントや .NET コンポーネントなどをコンパイルできます。
2) さまざまなプログラミング言語のサポート。 .NET アプリケーションは、C#、Visual Basic、F# などのさまざまなプログラミング言語を使用して作成できます。
3) 一般的な実行メカニズム。 ここで重要なのは、.NET には、.NET をサポートするすべての言語が理解できる特定の型のセットがあるということです。
4) 言語の統合。 Visual Basic でクラスを作成し、それを C# で拡張できます。
5) 基本クラスの大規模なライブラリ。 このライブラリのおかげで、API への低レベル呼び出しの実装の複雑さを忘れて、プログラミングだけに集中できます。
6) シンプルな導入モデル。 COM ライブラリとは異なり、.NET はレジストリに登録する必要がありません。 これは、assembly.dll として存在できます。

おそらくここでは、クラスや API インターフェースなど、理解できないものについて書いたと思います。 まだこれについて悩む必要はありません。 基本的に、これらすべてを知らなくてもプログラミングはできますが、学習方法としては、理論で少し練習を薄めてみましょう。
理論を完全に終えるために、.NET プラットフォームの主要な構成要素について説明します。

1) CLR (Common Language Runtime) - 共通言語ランタイム環境。 この環境の主なタスクは、.NET オブジェクトのロードと管理です (プログラマがこれを手動で行う必要がありません)。 さらに、CLR は、メモリ管理、アプリケーションの配置、アプリケーションのセキュリティに関連するチェックの実行など、多くの低レベルの詳細を処理します。
2) CTS (Common Type System) - 共通型システム。 これは、ランタイム (CLR) でサポートされるすべての可能なデータ型について説明します。 単一の言語が CTS 仕様で定義されているすべての機能を完全にサポートしているわけではないことに注意する必要があります。 したがって、次のようになります。
3) CLS (共通言語仕様)。 .NET Framework のすべてのプログラミング言語がサポートする必要がある一般的な型とプログラミング構造のサブセットについて説明します。

CLR および CTS/CLS 仕様に加えて、.NET プラットフォームは次の機能を提供します。 基本クラスライブラリ, すべての .NET プログラミング言語で利用できます。 このライブラリを使用すると、たとえば、ファイル I/O、グラフィックス、さまざまな外部デバイス、データ ストリーム、およびさまざまなサービスを (実装の詳細を考慮せずに) 高レベルで管理できます。

私は理論を書くのが得意ではないので、.NET の哲学をよりよく理解したい人には、Andrew Troelsen の著書「The C# 5.0 Programming Language and the .NET 4.5 Platform」の第 1 章を読むことをお勧めします。 2013年に出版されました。」 .NET プラットフォームのこの概要は、この本から引用したものです。 この本で私が遭遇した問題は、初心者向けに内容を説明するのがいかに難しいかということです。 そう思わないかもしれませんが、これは私の意見です。

さて、友達の皆さん、まだ C# を学びたいと思っていますか? それでは、大胆に先に進みましょう。将来的には、理論的な記事は最小限 (C# の学習の初めにのみ)、実践は 1 つだけになることをお約束します。 理論が必要な場合は、アンドリュー・トロエルセンの本を読んでください。
したがって、クラスまたはそのメソッドに関する情報が必要な場合は、すぐにアクセスしてください。

.NET Framework は、Windows システムのコンポーネントの 1 つです。 これにより、次世代アプリケーションを作成して使用できるようになります。 プラットフォームの目的 。ネットフレームワーク :

  • 総合的なものの創造 オブジェクト指向プログラミング環境さまざまな実装オプションが可能: コードをローカルに保存して実行できます。 ローカルで実行され、インターネット上で配布される。 またはリモートで実行されます。
  • ソフトウェアの導入とバージョン管理の競合を最小限に抑えるコード実行環境を提供します。
  • 未知の開発者または部分的に信頼されている開発者によって作成されたコードを含む、環境内でのコード実行のセキュリティを確保する。
  • スクリプトまたは解釈ベースの環境におけるパフォーマンスの問題に対処するコード ランタイム環境を提供します。
  • Windows アプリケーションと Web アプリケーションの両方で、まったく異なるアプリケーションにおける開発者の作業を統合します。
  • データ交換のあらゆる分野で業界標準を使用し、その結果、.NET Framework で作成されたコードと他のプログラムとの互換性が確保されます。