プログラミング言語の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 2022 をインストールしよう!
これからC#を学ぶために開発環境を整えましょう。具体的にはVisual Studioと呼ばれる統合開発環境(IDE)をインストールします。このIDEとはプログラムをプロジェクトとして管理して、コーディングからテストまで一括で行えるアプリケーションです。 ここでは本記事を作...
Visual Studio 2026 をインストールしよう!
最近リリースされたVisual Studio 2026をインストールする方法です。過去版の2022と同じなので、基礎的な部分は解説しません。 Visual Studio のダウンロード まずはインストールするためのファイルをダウンロードしましょう。次のリンクからCommunity版を...
[C#] Visual Studioでプロジェクトを作成して実行しよう!
Visual Studioをインストールしたので、実際にプロジェクトを作って実行してみましょう。ここでは今後の学習のために必要な最低限の手順を伝えます。プログラミングを始めるために必要な方法なので覚えてください。 と、その前に謝罪しないとなんですが、この...
Visual Studioも日々更新されるため、ある程度の頻度でアップデートを行いましょう。と言っても、殆どが全自動なので基本的にはクリックするだけで更新できます。 更新管理が楽なのもVisual Studioのメリットだよ。 便利なソフトですね。 なお、新規インストール...
前回、Visual Studioでプロジェクトを作成する際に.NETを選択しましたよね。この.NETとは何なのか。これは知っておくべきなので、補足として解説します。 .NET .NETとはMicrosoftが開発した共通言語基盤です。 より簡単に言うと、色々な便利機能を集めて、簡...
本来なら自動出力されたソースコードの解説に進みたいのですが、初心者に厄介な仕様があるので説明しておきます。具体的には、最上位レベルのステートメント(top-level statements)と呼ばれる仕様なのですが、これが逆に難易度を上げてる感があるんですよね。 最上...
本格的に自動出力されたコードを読み解いてみましょう。ここではC#の基礎となる知識を学び、この先に進めるようになりましょう。 このページが説明するコードと自身のコードが異なる場合、最上位レベルのステートメントが有効な可能性があります。まずは次の記事を参考...
ここではC#で特別な意味を持つ予約語について学びます。 予約語 予約語はC#に予め定義されてる単語です。この単語は特別な意味を持ち、後に説明する変数や関数において、同名の名前を利用することはできません。また、一部の予約語はContextual keywords(コンテ...
ここではC#の型について学びます。 型(type) の概念 変数や定数、評価式の結果など、C#では存在する値の全てに型があります。さらにC#は厳密に型指定された言語となり、異なる型の扱いに非常に厳しいです。 数値型で用意した変数に文字列を代入する処理を認...
C#の型を学んだので、その知識を活かして変数の使い方を学びましょう。なお、ここで学ぶのはC#で変数を利用する方法です。変数?って人は先に次の記事を読んでください。 変数宣言と利用方法 難しくないので、例を見たほうが早いでしょう。 namespace S...
ここでは変数の延長としてC#で配列を利用する方法を学びます。なお、配列自体が分からない人は先に次の記事に読んでください。 配列は参照型 最初に覚えることはC#の配列は参照型ということです。ここでポイントになるのは配列を示す変数が参照型です。 ...
ここではC#の型変換、キャストについて学びます。 キャスト (cast) キャストとは型変換のことです。ある型で定義された変数や値を別の型に変更することを言います。今の知識範囲だと全ての変換方法は必要ないので、最も基礎的な暗黙的キャストと明示的キャスト...
型と変数を学んだので演算ができるようになりました。という事で、ここではC#で利用できる演算子について理解しましょう。この中でbit演算を使用するので、理解してない人はコンピュータサイエンスの講座を先に読んでください。 算術演算子 +, -, *, /, % ...
数学では✕と÷は+と-より優先ですよね。同じようにプログラミングの演算子にも優先順位が存在します。ここではC#における演算子の優先順位を学びましょう。最悪知らなくても何とかなる方法もあるので合わせて説明します。 演算子の優先順位 全ての演算子に...
ここではC#のif文について理解しましょう。これはプログラムの基本構造で説明した選択にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 if statement (ステートメント) いわゆる条件分岐でif文と呼びます。つ...
ここではC#のswitch文について理解しましょう。これはプログラムの基本構造で説明した選択にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 switch statement (ステートメント) if文と同じく条件分岐の処理に...
ここではC#のfor文とwhile文について理解しましょう。これはプログラムの基本構造で説明した反復にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 for statement (ステートメント) いわゆる繰り返し処理でfor...
ここではC#のforeach文について理解しましょう。これはプログラムの基本構造で説明した反復にあたる処理です。なお、プログラムの基本構造が分からない人は先に次の記事を読んでください。 foreach statement (ステートメント) for文に名前が似てますよね。...
[C#] Jump構文(break, continue, return)を理解しよう!
ここではC#のJump(break, continue, return, goto)構文について学びましょう。ただし、goto構文だけは特殊なので別枠で解説します。 Jump statement (ステートメント) その名前の通り別の位置にジャンプしたり処理を抜けるための構文です。実はこれ、すでに...
ここでは最後のJump statementのgoto文について学びましょう。 goto statement (ステートメント) このgoto文とは、全ての制約を無視して指定したラベルまでジャンプ(移動)できるやばい構文です。おそらく否定的な意見のほうが多く、僕もそうでしたが学校の授業...
ここでは覚えた構文を省略形で記述する方法を学びましょう。簡易記述が可能な構文があるって話なので気楽に聞いてください。 省略が可能な構文 省略が可能なのはif, for, while, foreachの4つです。 では、実際にサンプルコードで省略形を見てみ...
基礎
ここではC#の三項演算子について理解しましょう。ちなみに正式名称は三項条件演算子です。ただ、三項演算子に属する演算子がこれしか無いので、みんな三項演算子と呼びます。 三項条件演算子 (ternary conditional operator) これはif文を便利にした演算子です...
ここではC#の定数を学びましょう。 定数 (constants) 定数とは名前の通りで固定された値です。つまりは変数のように値を変更することができません。また、仮に定数を変更しようと試みるとビルドエラーになるので、変更するという行為自体が禁止されます。 こ...
ここではC#の列挙型を学びましょう。簡単に言うと、すでに学んだ定数の強化版です。 列挙型 (enumeration) 列挙型とは、定数を連番として扱い型の概念を追加できる機能です。この型の概念を追加できるのが定数との大きな違いです。 では、構文とサンプル...
ここではC#の関数について学びます。 関数 (function) 関数とは、同一の処理を1機能としてまとめ、いつでも呼び出しできるようにする機能です。 例えばコードに同じような記述が10回ある場合、同じコードを10回書くのは非効率です。こういった場合に該当する...
関数(※1)を学んだことで、ついに値型と参照型の違いを知ることができます。ここではC#で最重要とも言える値型と参照型の違いを理解しましょう。 ※1現在の知識を踏まえて、ここではメソッドではなく関数と呼びます。 値型と参照型の復習 まずは値型と...
参照型の中でも特殊な動作をするstring型ですが、利用頻度はとても多いです。 例えば画面上に文字を表示する、動作記録をファイルに残すとか、これらは全て文字列を経由します。ここでは、そんな文字列についての知識を深め、より色々な場面で活用できるようになりまし...
ここでは繰り返し処理で利用するテクニックの無限ループを学習します。無限ループはC#に限った話じゃなく、よくある系ロジックなので全言語で使えます。 無限ループ 名前の通りループ内の処理を無限に繰り返します。for文かwhile文を利用して記述するので、実際...
CLIで学習を続けてますが、一方的に表示するだけだと飽きませんか? せっかくなのでCLIに文字を入力する方法を覚え、任意の値を利用できるようになりましょう。 CLIで文字入力 C#にはCLI経由で文字入力をする関数が用意されてます。次のサンプルコードを実行し...
ここではC#の例外処理について学びます。すでに少しだけ触れてますが、これは実行時エラーへの対策となります。ただ、例外処理もクラスの知識を必要とします。そのため60%くらいの解説になりますが、今はここまでいいと思ってます。 例外 (Exception) C#では実...
ここではプログラミングで重要なデバッグを理解しましょう。 デバッグ 最初の頃に説明しましたが、デバッグとはプログラムを実行してテストすることです。その中で不具合が見つかれば、修正と確認を繰り返し、プログラムとしての完成を目指します。 まともな...
今回はこれまでの学習を活かして「じゃんけんゲーム」を作りましょう。僕が学生の頃は課題として提出しろって言われました。今は知りません。 じゃんけんゲームの仕様 最低限の仕様は以下です。 ランダムな値を発生させる方法 CPU側の手を決める...
初級
ここではC#のクラスについて学びます。クラスはC#において最も大切な機能だと思ってます。それもあって最低限の内容を書いたつもりが、何かめっちゃ長くなりました。疲れたら数回に分けて読んでください。 クラス(class) クラスとは特定の機能を1つにまとめたも...
ここではC#の名前空間について学びます。 名前空間 (namespace) 名前空間とは、複数のクラス等を1つの領域にまとめる機能です。この仕組みを使うことで、ある程度の機能を1つのスコープにまとめることができます。 名前空間を定義する方法 まとめたい...
ここではC#のstaticについて学びます。 static staticは静的クラスや静的メンバを作成する時に利用します。 実はサンプルで既に利用していて、Main関数がstatic宣言されてます。 static void Main(string[] args) では、このstaticは何を意味す...
ここではC#の継承について学びます。これはクラスの延長線の話になりますが少し難しいです。まずはクラスの基礎知識が必要なので、忘れてしまった人は以下で復習しましょう。 継承(inheritance) 継承とは、あるクラスを元に新しいクラスを定義することです...
ここではC#のアクセス修飾子について学びます。これもクラスの延長線の話になります。最低でもクラスと継承の知識が必要なので、忘れてしまった人は以下で復習しましょう。 アクセス修飾子(Access Modifiers) アクセス修飾子とは、クラス、メソッド、プ...
ここではreadonlyキーワードを学びます。 readonlyキーワード readonlyとは、read + onlyで読み取り専用を意味します。例えばフィールドに書くことができ、そうすると読み取り専用のフィールドになります。 namespace Sample { public class Test { ...
[C#] initキーワードとrequired修飾子を理解しよう!
ここでは知っておくと便利なinitキーワードの紹介です。ついでに一緒に利用するrequired修飾子も説明します。 initキーワード 英語的にinitとは初期化の省略形です。本来の単語はInitializeまたはInitializationになります。よくあるプログラミング用語で、仮に...
ここではC#の抽象クラスについて学びます。これはクラスの継承に関する話の延長になります。理解するためには継承の仕組みの理解が必須なので、忘れてしまった人は以下で復習しましょう。 抽象クラス(abstract class) 抽象クラスとは、抽象的で不完全なクラ...
ここではC#のオーバーライドについて学びます。 オーバーライド(override) オーバーライドとは基底クラスで定義したメソッド(プロパティも可能)を派生クラスで書き換えることを言います。その名前の通りで上書きです。メソッドの機能を上書きして、違う機能に差...
[C#] インターフェイス(interface)を理解しよう!
ここではC#のインターフェイスについて学びます。これは継承や抽象クラスと似た仕組みで、殆ど同種の機能と思っていいです。 インターフェイス(interface) インターフェイスとは、あるクラスに機能の実装(メソッドやプロパティ等)を強制させる仕組みで...
ここではC#のオーバーロードについて学びます。なお、似た名前にオーバーライドって機能がありましたが、両者は全く関係がありません。 もちろん骸骨の異世界系アニメでもありません。 分かるわ。 オーバーロード(overload) オーバーロードとは、...
ここではC#の構造体について学びます。構造体を凄く簡単に説明すると、劣化版クラスです。 あまりに酷い説明。 だって、現実的にそうなんだもん。 構造体(struct) 最初に伝えたとおり、構造体はクラスの劣化版です。構造体で可能なことはクラスで...
今回はC#の例外処理について知識を深めます。残念ながら前回の内容は実用レベルだと不十分で、本格的なプログラムを作る場合は知識が足りません。 例外(Exception) 最初におさらいです。C#では実行時に発生するエラーを例外と言います。そして、この例外を...
ここでは少し特殊な引数の指定方法について学びます。引数なのでメソッド(関数)で利用する知識ですが、知らなくても困らない気もします。 名前付き引数(Named arguments) これはメソッドに引数を与える時に各引数を名前を利用して指定します。正直、サ...
ここではC#の可変長引数について学びます。これはメソッド(関数)で利用する知識で、名前付き引数とか省略可能な引数と同じような話です。 paramsキーワード 可変長引数はparamsキーワードを利用して記述します。 paramsとはparametersの略語です。つ...
ここではC#のin/out/ref引数について学びます。これはメソッド(関数)で利用する特殊な引数になります。 値型と参照型の理解 この仕組みを理解するためには値型と参照型の動作をしっかりと把握する必要があります。特に両者の値渡し時の挙動を理解してないと...
ここではC#のis演算子とas演算子について学びます。この話はキャストが深く関係するため、以下を理解してる必要があります。 危険なキャスト C#でキャストする最も簡単な方法は暗黙的キャストまたは明示的キャストです。そして暗黙的キャストは問題ない...
[C#] ローカル関数(local function)を理解しよう!
ここではC#のローカル関数を学習します。当たり前ですが、関数の知識が必要になります。 ローカル関数(local function) これはメソッドの中に関数(メソッド)を記述することです。より正確にはコンストラクタとかプロパティの内部にも記述できます。 C#に...
[C#] Nullable型(null許容値型)を理解しよう!
C#には少し特殊な型でNullable型と呼ばれる型が存在します。値型と一緒に利用する特殊な型で、知っておくと便利系な知識です。 Nullable型(null許容値型) これは値型を拡張してnull値の代入を可能にする仕組みです。こんなのをイメージしてください。値型をNull...
[C#] Null条件演算子とNull合体演算子を理解しよう!
ここではC#のnullに対する便利系の演算子、Null条件演算子とNull合体演算子を学びます。知らなくてもOKと言いたいとこですが、これ超便利です。僕は必須知識だと思ってます。 Null条件演算子 Null条件演算子とは、メソッド等にアクセスする際、対象がnullの場合...
[C#] switch文の型パターンマッチングを理解しよう!
ここではswitch文で利用できる型パターンマッチングを学習します。正直、正式な呼び名を知りません。単にパターンマッチングと呼ぶ気もします。 型パターンマッチング 型パターンマッチングとは、switch文で型を基準に分岐する方法です。まず、次のようなク...
中級
ここではプログラムを複数のソースコードに分割する方法を学びます。普通は複数のcsファイルでプログラムを作成するので、これは必須の知識になります。 複数のソースコードに分割する理由 理由は単純です。1ファイルに全て書いてたら長くて読みづらいし、1人し...
ここではC#のボックス化(Boxing)について学習します。C#には大きく値型と参照型がありますが、これに関連する話です。 ボックス化(Boxing)とボックス化の解除(Unboxing) ボックス化とは、値型を参照型にキャストすることを言います。ボックス化の解除は、そ...
C#に標準的に用意されてる例外の紹介です。この辺の例外は事象を判断するのに便利なので、覚えておいたほうがお得ですよ。 公式ドキュメント 実はC#の公式に例外に関するドキュメントがあります。https://learn.microsoft.com/en-us/dotnet/standard/de...
ここではC#の匿名型とdynamic型を学習します。 匿名型(Anonymous type) 匿名型とは、型名が存在しない型を意味します。これは型名が匿名とも言えます。SNS等で本人特定されないことを匿名性とか言いますが、似てなくもないです。 型の名前が存在しないって意...
ここではC#のジェネリックを学習します。もしくはジェネリック型と呼びます。また、C++だとテンプレートと呼ばれ、機能的にはC#よりも優れてます。 ジェネリック(generic) ジェネリックとは、汎用的な型を利用してメソッドやクラスの処理を共通化する機能です。...
[C#] .NETに定義されたGeneric型を利用しよう!
ここでは.NETに定義されたジェネリック型を実際に利用してみましょう。なお、利用することが目的なので、1つ1つのジェネリック型については深く解説しません。 System.Collections.Generic名前空間 コレクション系のジェネリック型が定義されてる空間です。...
[C#] 非ジェネリック(generic)コレクションについて
ジェネリック系のコレクションを紹介しましたが、実は非ジェネリックなコレクションも存在します。 これはC#にジェネリックが実装される前に存在したクラスで、現在は全く使われてません。つまり、これらのクラスが利用されてるコードは総じてゴミです。江戸時代で時が...
[C#] イベント(event)とデリゲート(delegate)を理解しよう!
ここではC#のイベントを学習します。その中で登場するデリゲートはイベントで必要になる仕組みです。 このイベントですが、自分で作るよりも.NETに定義済みのイベントを利用して覚えるほうが簡単です。そのため、今回は利用者としてイベントを理解しましょう。別枠で自...
[C#] イベント(event)とデリゲート(delegate)を自作しよう!
ここではC#のイベントを自作する方法を学習します。正直、定義済みを使うことのほうが多いのですが、知識的には理解すべきと思います。 なお、イベントの基礎知識は前回の記事で習得済みを前提に進めます。基礎的な部分の解説は一切しないので、分からない人は先にこち...
[C#] ラムダ式(Lambda expressions)を理解しよう!
ここではC#のラムダ式を学習します。個人的にC#で1番好きな記述方法です。 いわゆる簡易記述になり、ラムダ式を使わない記述もできます。ただ、実際は必須です。これを覚えないと現実的なコードが書けません。 ラムダ式(Lambda expressions) ラムダ式とは、...
[C#] 拡張メソッド(Extension Methods)を理解しよう!
ここではC#の拡張メソッドを学習します。 拡張メソッド(Extension Methods) 拡張メソッドとは、既存のクラスにメソッドを追加できる機能です。 継承を利用すれば既存クラスに機能を追加することができますが、その場合は別クラスになります。対して拡張メソ...
上級
.NETのソースコードを見れたら設計の参考にできるのに... とか思ったことありませんか? その願い叶いますよ。と言うか、.NETからOSS(オープンソース)になったのでGitHubで普通に公開されてます。 Microsoft様ありがとう。.NETって最強資産をオープンソースで公開って...