プログラミング言語のC#を学習できる記事をまとめました。このページから関連する記事にアクセスできます。
C#は僕が1番好きなプログラミング言語です。業務で使ってることもあり、人生で最も利用してるプログラミング言語な気がします。
最初に学んだC言語と比べて快適なコーディングができ、.NETという最強のライブラリ郡。そしてVisualStudioとの親和性の高さ。
今では遥かな進化を遂げてマルチプラットフォームにも対応済み。この言語は隙がない! 強すぎる!
もう全部C#で良くね? Javaとか何のために存在してんだよ。
消されますよ。てか、マスターのJavaは時が止まってるでしょ。
どれが最強論を唱えると絶対炎上するよね。普通にC++だと思うけど。
たぶん、100人中101人はC++(C言語含む)が最強って言うと思うんですが、この言語の問題は習得難易度です。
後は他の言語に比べて開発効率も悪いです。ヘッダーファイルの概念とか無駄が多い。流石に何とかしてくれ。
今の時代、初心者に対してC++をオススメすることはありません。もっと良い選択肢が数多くあります。
その中でも僕のオススメはC#です。名前がC言語やC++と似てますが、こいつ赤の他人です。どっちかって言うとJavaの親戚。
Microsoftの努力で割りと何でも作れるようになったので、最初に学ぶ言語としてオススメしたいです。
特にVisualStudioと呼ばれる開発環境が優秀で、こいつ無しでは生きていけない体になります。
世間一般的なC#の習得範囲度は普通から難しいと言われてますが、それは単に簡単な言語が多いからです。
正直なところ普通の普通。C++に比べれば遥かに楽です。このサイトにも学習用の記事があるので、是非参考にしてください。
C++と比べたら殆どのプログラミング言語が楽では。
それはある。
入門
これからC#を学ぶために開発環境を整えましょう。具体的にはVisual Studioと呼ばれる統合開発環境(IDE)をインストールします。このIDEとはプログラムをプロジェクトとして管理して、コーディングからテストまで一括で行えるアプリケーションです。 ここでは本記事を作成した時点の最新版であるVisual Studio 2022をインストールする方法を記載します。仮にバージョンが変わっても、いつも同じような方法なので、特に困るような問題は起きないと思います。 一部のプログラミング言語はテキ...
Visual Studioをインストールしたので、実際にプロジェクトを作って実行してみましょう。ここでは今後の学習のために必要な最低限の手順を伝えます。プログラミングを始めるために必要な方法なので覚えてください。 と、その前に謝罪しないとなんですが、このページでは画像を使ってVisual Studioの操作を説明します。ただ、僕のVisual Studioは色々カスタマイズしてるので、ちょっと表示が違います。 手抜きだ! 表示位置が違うだけだから探せば項目は見つかりま...
Visual Studioも日々更新されるため、ある程度の頻度でアップデートを行いましょう。と言っても、殆どが全自動なので基本的にはクリックするだけで更新できます。 更新管理が楽なのもVisual Studioのメリットだよ。 便利なソフトですね。 Visual Studioの更新方法 Visual Studio Installerと呼ばれるソフトウェアを利用してアップデートします。普通はVisual Studioを入れた時点で一緒にインストールされるため、スタートメニュ...
前回、Visual Studioでプロジェクトを作成する際に.NETを選択しましたよね。この.NETとは何なのか。これは知っておくべきなので、補足として解説します。 .NET .NETとはMicrosoftが開発した共通言語基盤です。 より簡単に言うと、色々な便利機能を集めて、簡単にプログラム実装できるようにした仕組みです。さらにマルチプラットフォームが採用されてるので、Windowsを問わず動作することができます。 ちなみに.NET自体はC#のためだけに存在するシステム...
本来なら自動出力されたソースコードの解説に進みたいのですが、初心者に厄介な仕様があるので説明しておきます。具体的には、最上位レベルのステートメント(top-level statements)と呼ばれる仕様なのですが、これが逆に難易度を上げてる感があるんですよね。 最上位レベルのステートメント 簡単に言うと本来書くべき部分を省略できる記述です。 では、まずは自動出力されたProgram.csを見てみましょう。こんな感じになってますかね? // See https://ak...
本格的に自動出力されたコードを読み解いてみましょう。ここではC#の基礎となる知識を学び、この先に進めるようになりましょう。 このページが説明するコードと自身のコードが異なる場合、最上位レベルのステートメントが有効な可能性があります。まずは次の記事を参考に、最上位レベルのステートメントを利用しないプロジェクトを作ってください。 自動出力されたコードの確認 最初に自動出力されたコードを確認しましょう。Program.csはこんな感じですよね? namespace S...
ここではC#で特別な意味を持つ予約語について学びます。 予約語 予約語はC#に予め定義されてる単語です。この単語は特別な意味を持ち、後に説明する変数や関数において、同名の名前を利用することはできません。また、一部の予約語はContextual keywords(コンテキスト キーワード)と呼ばれ、ある特定の場面でのみ予約語として機能します。 こちらは予約語として機能してない場合は同名の名前を付けることができますが、特定の場面で被るため、あまり推奨はしません。基本的には両方とも予...
ここではC#の型について学びます。 型(type) の概念 変数や定数、評価式の結果など、C#では存在する値の全てに型があります。さらにC#は厳密に型指定された言語となり、異なる型の扱いに非常に厳しいです。 数値型で用意した変数に文字列を代入する処理を認める言語もありますが、C#ではこのような処理は認められません。故に型を理解することはC#では必須の知識になります。自分がどんな型を扱ってるか常に把握しましょう。 C#において型を間違えようものならボコボコにされます。 ...
C#の型を学んだので、その知識を活かして変数の使い方を学びましょう。なお、ここで学ぶのはC#で変数を利用する方法です。変数?って人は先に次の記事を読んでください。 変数宣言と利用方法 難しくないので、例を見たほうが早いでしょう。 namespace Sample { internal class Program { static void Main(string[] args) { // 変数宣言 int age; ...
ここでは変数の延長としてC#で配列を利用する方法を学びます。なお、配列自体が分からない人は先に次の記事に読んでください。 配列は参照型 最初に覚えることはC#の配列は参照型ということです。ここでポイントになるのは配列を示す変数が参照型です。 例えばint型の配列を作った場合、配列を示す変数は参照型ですが、要素内の値はint型なので値型です。これがstring型の場合、配列を示す変数は変わらず参照型ですが、要素内の値も参照型になります。 配列の宣言、初期化、...
ここではC#の型変換、キャストについて学びます。 キャスト (cast) キャストとは型変換のことです。ある型で定義された変数や値を別の型に変更することを言います。今の知識範囲だと全ての変換方法は必要ないので、最も基礎的な暗黙的キャストと明示的キャストを理解しましょう。 暗黙的キャスト これが最もシンプルな方法です。まずはサンプルコードを見てみましょう。 namespace Sample { internal class Program { ...
型と変数を学んだので演算ができるようになりました。という事で、ここではC#で利用できる演算子について理解しましょう。この中でbit演算を使用するので、理解してない人はコンピュータサイエンスの講座を先に読んでください。 算術演算子 +, -, *, /, % いわゆる四則演算です。簡単なので例を見て覚えましょう。 namespace Sample { internal class Program { static void Main...
数学では✕と÷は+と-より優先ですよね。同じようにプログラミングの演算子にも優先順位が存在します。ここではC#における演算子の優先順位を学びましょう。最悪知らなくても何とかなる方法もあるので合わせて説明します。 演算子の優先順位 全ての演算子には優先順位が存在します。現状では不明な演算子もありますが一覧を見てみましょう。 上から優先順位が高い順に並んでます。仮に優先順位が同列の場合、後述する結合規則に従って順番が決定されます。 多い... 確...
ここではC#のif文について理解しましょう。これはプログラムの基本構造で説明した選択にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 if statement (ステートメント) いわゆる条件分岐でif文と呼びます。つまりは何らかの条件に従って、いずれかの処理を実行する構文です。 パターン1: if いくつかパターンがありますが、最も簡単な記述はこれです。これは条件を満たすとブロック内に処理が進み、満たさない場合はブロック...
ここではC#のswitch文について理解しましょう。これはプログラムの基本構造で説明した選択にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 switch statement (ステートメント) if文と同じく条件分岐の処理になります。基本的にはif文と同じなのですが、switch文のほうが高度な記述ができます。 パターン1: switch 定数値 最もシンプルな記述はこれです。 評価値に記述できるの...
ここではC#のfor文とwhile文について理解しましょう。これはプログラムの基本構造で説明した反復にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 for statement (ステートメント) いわゆる繰り返し処理でfor文と呼びます。これは条件式を満たす限り、同じ処理を永遠と繰り返す構文です。 ポイントは次の3つです。 初期化で変数を宣言する 条件式に繰り返し条件を記述する 反復式で変数をインクリメ...
ここではC#のforeach文について理解しましょう。これはプログラムの基本構造で説明した反復にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 foreach statement (ステートメント) for文に名前が似てますよね。実際にところ亜種みたいなものです。これは対象となるコレクションの全てに対して、繰り返し処理を行いたい場合に利用する構文です。 ここでコレクションの定義ですが、簡単に言えば配列やリストなどの複数個...
ここではC#のJump(break, continue, return, goto)構文について学びましょう。ただし、goto構文だけは特殊なので別枠で解説します。 Jump statement (ステートメント) その名前の通り別の位置にジャンプしたり処理を抜けるための構文です。実はこれ、すでに半分は学習済みです。では、順番に見てみましょう。 break statement (ステートメント) switch文やfor文を抜けるために使いましたよね。 ...
ここでは最後のJump statementのgoto文について学びましょう。 goto statement (ステートメント) このgoto文とは、全ての制約を無視して指定したラベルまでジャンプ(移動)できるヤバい構文です。恐らく否定的な意見のほうが多く、僕もそうでしたが学校の授業なら100%使うなって教わります。 何故でしょうか? それはプログラムの基本構造を無視して動作するからです。では、実際にサンプルコードで動きを見てみましょう。 namespace Sam...
ここでは覚えた構文を省略形で記述する方法を学びましょう。簡易記述が可能な構文があるって話なので気楽に聞いてください。 省略が可能な構文 省略が可能なのはif, for, while, foreachの4つです。 では、実際にサンプルコードで省略形を見てみましょう。 namespace Sample { internal class Program { static void Main(string[] args) { ...
基礎
ここではC#の三項演算子について理解しましょう。ちなみに正式名称は三項条件演算子です。ただ、三項演算子に属する演算子がこれしか無いので、みんな三項演算子と呼びます。 三項条件演算子 (ternary conditional operator) これはif文を便利にした演算子です。先に伝えると、無理に使わなくてもif文で書けます。 では、実際にif文で記述されたパターンを三項演算子に変更する例を見てみましょう。これはnの値によってxの初期値を決めるサンプルコードです。 ...
ここではC#の定数を学びましょう。 定数 (constants) 定数とは名前の通りで固定された値です。つまりは変数のように値を変更することができません。また、仮に定数を変更しようと試みるとビルドエラーになるので、変更するという行為自体が禁止されます。 これのメリットは、コーディングのミス等で本来変えてはいけない数値を触る危険性を回避できます。また、定数は変数のように名前を与えることができるので、0や1など意味不明な数値を減らすことができます。 定数を定義する方法...
ここではC#の列挙型を学びましょう。簡単に言うと、すでに学んだ定数の強化版です。 列挙型 (enumeration) 列挙型とは、定数を連番として扱い型の概念を追加できる機能です。この型の概念を追加できるのが定数との大きな違いです。 では、構文とサンプルコードを確認してみましょう。 namespace Sample { // Enum型でSeason型を定義する enum Season { Spring, // Season型...
ここではC#の関数について学びます。 関数 (function) 関数とは、同一の処理を1機能としてまとめ、いつでも呼び出しできるようにする機能です。 例えばコードに同じような記述が10回ある場合、同じコードを10回書くのは非効率です。こういった場合に該当するコードを関数化して、いつでも呼び出せるようにします。 ちなみに、厳密にはC#に関数は存在せず、それよりも強化された仕組みとしてメソッドが存在します。メソッドは必ずクラスに属する必要があるのですが、今はそこまでの知識は...
関数(※1)を学んだことで、ついに値型と参照型の違いを知ることができます。ここではC#で最重要とも言える値型と参照型の違いを理解しましょう。 ※1現在の知識を踏まえて、ここではメソッドではなく関数と呼びます。 値型と参照型の復習 まずは値型と参照型について復習しましょう。この2つは値を保存する場所が大きなポイントになります。 値型 値型とは用意した領域に直接的に値を保存します。 参照型 参照型は値を別の領域に格納し、それを...
参照型の中でも特殊な動作をするstring型ですが、利用頻度はとても多いです。 例えば画面上に文字を表示する、動作記録をファイルに残すとか、これらは全て文字列を経由します。ここでは、そんな文字列についての知識を深め、より色々な場面で活用できるようになりましょう。 参照型と値型のどっち? 結論としてstring型は参照型です。ただし、以前にも伝えた通り動作的には値型です。これはいくら悩んでも意味がなく、C#の言語仕様で決まってるからです。 それを確認するサンプルコー...
ここでは繰り返し処理で利用するテクニックの無限ループを学習します。無限ループはC#に限った話じゃなく、よくある系ロジックなので全言語で使えます。 無限ループ 名前の通りループ内の処理を無限に繰り返します。for文かwhile文を利用して記述するので、実際のコードを見てみましょう。これを実行すると処理が完了せず、色々めんどうなことになるので実行はしないでください。 for文で無限ループ 終了条件を記述しないことで無限ループにします。なので、初期化と反復式は記述しても...
CLIで学習を続けてますが、一方的に表示するだけだと飽きませんか? せっかくなのでCLIに文字を入力する方法を覚え、任意の値を利用できるようになりましょう。 CLIで文字入力 C#にはCLI経由で文字入力をする関数が用意されてます。次のサンプルコードを実行して、何か文字列を入力した後に改行してください。 namespace Sample { internal class Program { static void Main(string[] args) ...
ここではC#の例外処理について学びます。すでに少しだけ触れてますが、これは実行時エラーへの対策となります。ただ、例外処理もクラスの知識を必要とします。そのため60%くらいの解説になりますが、今はここまでいいと思ってます。 例外 (Exception) C#では実行時に発生するエラーを例外と言います。僕が知ってる他の言語も大半が同じだった気がします。この例外とは、特定の条件において処理を完了できない問題が起きると発生し、その例外を誰もcatch(キャッチ)しないとプログラムが強制終了し...
ここではプログラミングで重要なデバッグを理解しましょう。 デバッグ 最初の頃に説明しましたが、デバッグとはプログラムを実行してテストすることです。その中で不具合が見つかれば、修正と確認を繰り返し、プログラムとしての完成を目指します。 まともな会社ならデバッグの時間をしっかり確保してますが、ブラック企業やゴミプロマネが担当だと何故かデバッグ時間が無かったりします。そんな時は時間内で適当にデバッグして作業を終えましょう。それでトラブルが起きるなら案件を管理してる側に才能が無いです。...
今回はこれまでの学習を活かして「じゃんけんゲーム」を作りましょう。僕が学生の頃は課題として提出しろって言われました。今は知りません。 じゃんけんゲームの仕様 最低限の仕様は以下です。 ランダムな値を発生させる方法 CPU側の手を決めるためにランダムな値が必要になります。ちなみにプログラムではランダムな値を乱数と呼びます。この乱数ですが、若干クラスの知識を必要とするため、今回は記述だけ伝えます。深く考えず、このまま使ってください。 Random ra...
初級
ここではC#のクラスについて学びます。クラスはC#において最も大切な機能だと思ってます。それもあって最低限の内容を書いたつもりが、何かめっちゃ長くなりました。疲れたら数回に分けて読んでください。 クラス(class) クラスとは特定の機能を1つにまとめたものです。正直、説明が難しいのでコードを使って話します。最初に以下の記述方法とサンプルコードを見てください。これは車という機能をクラス化したコードです。 // クラス public class Car { ...
ここではC#の名前空間について学びます。 名前空間 (namespace) 名前空間とは、複数のクラス等を1つの領域にまとめる機能です。この仕組みを使うことで、ある程度の機能を1つのスコープにまとめることができます。 名前空間を定義する方法 まとめたい領域をnamespaceと{}で囲みます。実は最初から何度も登場してますが、改めて確認しましょう。 では、以下が構文とサンプルコードです。 // 名前空間のOSを定義 namespace...
ここではC#のstaticについて学びます。 static staticは静的クラスや静的メンバを作成する時に利用します。 実はサンプルで既に利用していて、Main関数がstatic宣言されてます。 static void Main(string[] args) では、このstaticは何を意味するのでしょうか? 静的とは「動かない」とか「一定」と言う意味らしいです。 より簡単に言うと、staticを付けたクラスやメソッドはアプリケーションで1つだ...
ここではC#の継承について学びます。これはクラスの延長線の話になりますが少し難しいです。まずはクラスの基礎知識が必要なので、忘れてしまった人は以下で復習しましょう。 継承(inheritance) 継承とは、あるクラスを元に新しいクラスを定義することです。こうすることで新しく定義したクラスは元になったクラスの全ての機能を有することができます。 簡単に言えば親子関係です。親(A)を元に子(B)を定義することができます。人間なら全ての特性を引き継ぐことはありませんが、この世...
ここではC#のアクセス修飾子について学びます。これもクラスの延長線の話になります。最低でもクラスと継承の知識が必要なので、忘れてしまった人は以下で復習しましょう。 アクセス修飾子(Access Modifiers) アクセス修飾子とは、クラス、メソッド、プロパティ、フィールド等へのアクセス範囲を制限するために使います。 既に解説したprivateとpublicを含めると、全部で5種類(public, protected, internal, private, f...
ここではreadonlyキーワードを学びます。 readonlyキーワード readonlyとは、read + onlyで読み取り専用を意味します。例えばフィールドに書くことができ、そうすると読み取り専用のフィールドになります。 namespace Sample { public class Test { public readonly int MaxValue = 1000; } internal class Program { sta...
ここでは知っておくと便利なinitキーワードの紹介です。ついでに一緒に利用するrequired修飾子も説明します。 initキーワード 英語的にinitとは初期化の省略形です。本来の単語はInitializeまたはInitializationになります。よくあるプログラミング用語で、仮にメソッド名がInitialize()だと、初期化用のメソッドを意味します。 でっ、今回の話はC#に用意されたinitキーワードの話です。説明には以下のクラスを利用することにします。 na...
ここではC#の抽象クラスについて学びます。これはクラスの継承に関する話の延長になります。理解するためには継承の仕組みの理解が必須なので、忘れてしまった人は以下で復習しましょう。 抽象クラス(abstract class) 抽象クラスとは、抽象的で不完全なクラスを意味します。 全く分からないよ。 僕も同じ気持ちです。よくある日本語に翻訳しないほうが良くねって感じの言葉だね。 簡単に言ってしまうとインタンス化できないクラスです。別の表現をするならインタンス化する...
ここではC#のオーバーライドについて学びます。 オーバーライド(override) オーバーライドとは基底クラスで定義したメソッド(プロパティも可能)を派生クラスで書き換えることを言います。その名前の通りで上書きです。メソッドの機能を上書きして、違う機能に差し替えるような感じです。 オーバーライドする側(派生クラス)の記述は難しくなく、書き換える時にoverrideってキーワードを付けます。抽象クラスの学習で少し触りましたが、以下みたいなのが簡単なサンプルコードになります。 ...
ここではC#のインターフェイスについて学びます。これは継承や抽象クラスと似た仕組みで、殆ど同種の機能と思っていいです。 インターフェイス(interface) インターフェイスとは、あるクラスに機能の実装(メソッドやプロパティ等)を強制させる仕組みです。 ◆ C#を問わないインターフェイスの意味はこちら。 今回の話なら対象はクラスになります。例としてClassAに足し算を依頼する話にしましょう。ClassAに2個の数値を与えて足し算をして欲しいので...
ここではC#のオーバーロードについて学びます。なお、似た名前にオーバーライドって機能がありましたが、両者は全く関係がありません。 もちろん骸骨の異世界系アニメでもありません。 分かるわ。 オーバーロード(overload) オーバーロードとは、引数が異なるメソッドを同名で定義できる機能です。これは例を見たほうが早いので、次のサンプルコードを実行してください。 namespace Sample { public class Calculation...
ここではC#の構造体について学びます。構造体を凄く簡単に説明すると、劣化版クラスです。 あまりに酷い説明。 だって、現実的にそうなんだもん。 構造体(struct) 最初に伝えたとおり、構造体はクラスの劣化版です。構造体で可能なことはクラスで全て実現できます。例えばフィールドとかメソッド、プロパティみたいな基本機能は構造体にも作成できます。また、使用方法もクラスと同じです。と言うか、ぱっとみの見た目もクラスと同じような形してます。 逆に構造体はクラス...
今回はC#の例外処理について知識を深めます。残念ながら前回の内容は実用レベルだと不十分で、本格的なプログラムを作る場合は知識が足りません。 例外(Exception) 最初におさらいです。C#では実行時に発生するエラーを例外と言います。そして、この例外を誰もcatch(キャッチ)しない場合にプログラムが強制終了します。 また、この例外処理ですが、一般的に重い処理(コストが高いと言う)に分類されます。つまりは極論になりますが、例外処理で対策するよりも事前の分岐処理で逃げた...
ここでは少し特殊な引数の指定方法について学びます。引数なのでメソッド(関数)で利用する知識ですが、知らなくても困らない気もします。 名前付き引数(Named arguments) これはメソッドに引数を与える時に各引数を名前を利用して指定します。正直、サンプルコード見てもらったほうが早いと思います。 namespace Sample { internal class Display { public void Output(string nam...
ここではC#の可変長引数について学びます。これはメソッド(関数)で利用する知識で、名前付き引数とか省略可能な引数と同じような話です。 paramsキーワード 可変長引数はparamsキーワードを利用して記述します。 paramsとはparametersの略語です。つまり、複数のパラメーター(引数)を意味します。そして、paramsキーワードが付いた引数は可変長となり、任意の個数を指定できる引数になります。 以下がサンプルコードです。 namespa...
ここではC#のin/out/ref引数について学びます。これはメソッド(関数)で利用する特殊な引数になります。 値型と参照型の理解 この仕組みを理解するためには値型と参照型の動作をしっかりと把握する必要があります。特に両者の値渡し時の挙動を理解してないと、全く意味が分からないと思います。 という事で、復習が必要な人はこちらをどうぞ。 in引数 inを付けた引数は読み取り専用であることを意味します。つまり書き換え不可能です。要はメソッドの引数に...
ここではC#のis演算子とas演算子について学びます。この話はキャストが深く関係するため、以下を理解してる必要があります。 危険なキャスト C#でキャストする最も簡単な方法は暗黙的キャストまたは明示的キャストです。そして暗黙的キャストは問題ないとしても、明示的キャストには危険が伴います。 特に型変換ができない場合は例外が発生するため、結果としてプログラムが死にます。以下は一般的なダウンキャストのサンプルコードです。これは明示的キャストのためビルドエラーにはなりま...
ここではC#のローカル関数を学習します。当たり前ですが、関数の知識が必要になります。 ローカル関数(local function) これはメソッドの中に関数(メソッド)を記述することです。より正確にはコンストラクタとかプロパティの内部にも記述できます。 C#には厳密な意味で関数は無いといったが、あれは嘘だ! はっ? いや、ローカル関数が正式名称って知らなかった。 正直、特に難しい部分はなく普通にメソッドの中に関数を書けばOK。 name...
C#には少し特殊な型でNullable型と呼ばれる型が存在します。値型と一緒に利用する特殊な型で、知っておくと便利系な知識です。 Nullable型(null許容値型) これは値型を拡張してnull値の代入を可能にする仕組みです。こんなのをイメージしてください。値型をNullable型で包み込む感じです。 こうやって元の値型の機能にNullable型の機能を付加します。なので、1段階経由して値型にアクセスしてる感じですね。 あくまでイメージの話ね。後、普通...
ここではC#のnullに対する便利系の演算子、Null条件演算子とNull合体演算子を学びます。知らなくてもOKと言いたいとこですが、これ超便利です。僕は必須知識だと思ってます。 Null条件演算子 Null条件演算子とは、メソッド等にアクセスする際、対象がnullの場合でも良い感じに処理してくれる演算子です。まずは次のサンプルコードを確認しましょう。これは普通にクラスのメソッドを呼んでるだけです。 namespace Sample { internal class Pr...
ここではswitch文で利用できる型パターンマッチングを学習します。正直、正式な呼び名を知りません。単にパターンマッチングと呼ぶ気もします。 型パターンマッチング 型パターンマッチングとは、switch文で型を基準に分岐する方法です。まず、次のようなクラス設計があったとします。 internal abstract class Role { } internal class Attacker : Role { public void Attack() { ...
中級
ここではプログラムを複数のソースコードに分割する方法を学びます。普通は複数のcsファイルでプログラムを作成するので、これは必須の知識になります。 複数のソースコードに分割する理由 理由は単純です。1ファイルに全て書いてたら長くて読みづらいし、1人しか開発できません。特にソースコードの長さと保守性は関係性が高く、ソースコードが長すぎるとゴミ扱いされます。 何行くらいから長いの? 1000行とか超えると長いんだけど、UI系とか普通に記述して超えることもある。それもあって特に何...
ここではC#のボックス化(Boxing)について学習します。C#には大きく値型と参照型がありますが、これに関連する話です。 ボックス化(Boxing)とボックス化の解除(Unboxing) ボックス化とは、値型を参照型にキャストすることを言います。ボックス化の解除は、その逆で参照型を値型にキャストすることです。 これ、単にキャストだけの話ではありません。 C#は全ての型がobject型を継承するため、どんな型でもobject型にアップキャストできます。当然...
C#に標準的に用意されてる例外の紹介です。この辺の例外は事象を判断するのに便利なので、覚えておいたほうがお得ですよ。 公式ドキュメント 実はC#の公式に例外に関するドキュメントがあります。https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/using-standard-exception-types ここを読むとException型あたりは任意発生させるなって書いてあります。 ...
ここではC#の匿名型とdynamic型を学習します。 匿名型(Anonymous type) 匿名型とは、型名が存在しない型を意味します。これは型名が匿名とも言えます。SNS等で本人特定されないことを匿名性とか言いますが、似てなくもないです。 型の名前が存在しないって意味が分からないと思いますが、本当にそのままです。メソッド配下など、記述できる場所は限られますが、次のような名無し型を作れます。 namespace Sample { internal class Pr...
ここではC#のジェネリックを学習します。もしくはジェネリック型と呼びます。また、C++だとテンプレートと呼ばれ、機能的にはC#よりも優れてます。 ジェネリック(generic) ジェネリックとは、汎用的な型を利用してメソッドやクラスの処理を共通化する機能です。そして、この時に利用する型をジェネリック型(generic type)と言います。 Genericは英語で汎用とか一般を意味します(たぶん)。 汎用的に使える型って意味ですか? そうだよ(適当)。 雑.....
ここでは.NETに定義されたジェネリック型を実際に利用してみましょう。なお、利用することが目的なので、1つ1つのジェネリック型については深く解説しません。 System.Collections.Generic名前空間 コレクション系のジェネリック型が定義されてる空間です。C#でジェネリック型と言えば、ここです。と言っても、ジェネリック型はあくまで総称なので、他の名前空間にも色々と定義されてます。 この名前空間の中にも複数のジェネリック型が存在しますが、今回はList型と...
ジェネリック系のコレクションを紹介しましたが、実は非ジェネリックなコレクションも存在します。 これはC#にジェネリックが実装される前に存在したクラスで、現在は全く使われてません。つまり、これらのクラスが利用されてるコードは総じてゴミです。江戸時代で時が止まってます。と言うことで、そんな使わないクラスを把握しておき、ゴミを増やさないように気をつけましょう。 今回紹介するクラスはマジでメリットがありません。素直にジェネリック版を使いましょう。 System.Coll...