C#の機能の追補
ASP.NET Core などの最新の技術を学ぶにあたって,C#の機能について再確認,あるいは理解を更新しておくべきいくつかの部分がある. 特に2年次までのプログラミング科目では学んでいない技術要素もあるため本節の内容は必読である.
本節では以下の3つのC#の機能について紹介する.
一部は2年次までのプログラミングの科目で紹介済みのものもあるが,追加の説明も含まれているためよく読んで理解すること.
トップレベルステートメント
.NET 6.0以降では「コンソールアプリケーション」を作成したときの Program.cs ファイルの書き方が変更されている. _はプロジェクト作成時に,「最上位レベルのステートメントを使用しない」にチェックを入れた場合と入れない場合の Program.cs の記述例である.
_を見ると分かるように,「最上位レベルのステートメントを使用しない」にチェックを入れない場合はProgram
クラスやMain()
メソッドのシグネチャが
一切現れていないことが分かるだろう._のような従来の Program.cs ファイルにはProgram
クラスが定義されており,この中にMain()
という
名前の静的メソッドが定義されていた.このMain()
メソッドに書かれた処理がそのアプリケーションのエントリーポイント,
すなわちプログラムを起動したときに実行される処理となっていた.
これは トップレベルステートメント と呼ばれる,Program.cs ファイルにMain()メソッドの中身だけを直接書ける 機能である(_).
なお,トップレベルステートメントを使用している場合,Program
クラスやMain()
メソッドの記述は現れていないが,内部的には
これらのクラスやメソッドが定義されているものとして扱われている.
新しいNull許容/非許容型
.NET 6.0以降では,Null許容/非許容の考え方が変更されている.従来の(値型の)Null許容型についてはプログラミング演習Ⅲ(2023;金澤クラス)第05回を参照せよ.
.NET 6.0以降のデフォルトの設定では,すべての値型はもちろんのこと参照型も明示的に指定しない限りNull非許容,つまりはnull
を代入できなくなった.
このため値型のNull許容型と同様に,参照型にも「Null許容参照型」
という概念が追加された.これは C# 8.0 (2019)で導入された機能である.参照型の場合もnullを代入させる必要がある場合は,型名に?
をつける必要がある.
_はNull許容/非許容参照型の例である.
|
|
LINQ
LINQは,正式には統合言語クエリ(Language Integrated Query)と呼ばれる, コレクションに対する操作をSQL風に,しかもC#のソースコード内に直接書くことができる機能であり, C# 3.0(2007)で導入された.
たとえばあるリストに格納されたオブジェクトのうち,条件に合うものだけに何か処理を行う場合, 従来は_のように明示的なループを記述する必要があった.
|
|
これをLINQを用いて実装すると_のようになる.
|
|
3~5行目にひっくり返したSQLのSELECT文のようなものがあるが,これがLINQの記述例である.
ここでは絞り込み(関係代数的には「選択」の操作)しか行っていないが,order by
キーワードを使って結果をソートしたり,
select
の部分に何らかの生成式を書いてコレクションを別の型のコレクションに変換したり,
といったことも可能である.
後述するC#でのデータベースへのアクセス方法の一つであるEntity Framework Coreは,この技術を応用しており この方法で記述したコレクション操作からSQL文を自動生成してデータベースサーバへの通信が行われるようになっている.