C#樹林– category –
プログラミング言語のC#を勉強したときのノートです。
-
C#樹林
【C#】クラスの継承(Inheritance):基本クラスのメンバーを派生クラスで再利用する方法
継承とは:コードの再利用と拡張 オブジェクト指向プログラミングにおいて「継承(Inheritance)」は、既存のクラス(親クラス)の機能やデータ構造を受け継ぎながら、新しいクラス(子クラス)を定義する仕組みです。 継承を利用することで、共通のフィー... -
C#樹林
【C#】コンストラクタのオーバーロードと「this」による呼び出し:初期化ロジックの共通化
オブジェクト初期化の多様性 クラスや構造体を設計する際、インスタンスの生成方法(初期化のパターン)を複数提供したい場合があります。例えば、すべての値を個別に指定して生成する場合もあれば、一つの値を基準に残りを自動設定して生成する場合もあり... -
C#樹林
【C#】コンストラクタの定義と活用:クラスの初期化を正しく行う方法
クラスとコンストラクタ C#のクラス(class)は、オブジェクト指向プログラミングにおける「設計図」です。この設計図から実際の「モノ(インスタンス)」を生成する際、そのオブジェクトが最初から正しいデータ(名前やIDなど)を持っている状態にするた... -
C#樹林
【C#】コンストラクタの基本:newキーワードとクラスの初期化メソッド
クラスの「コンストラクタ」とは C#の「クラス(class)」は、オブジェクト(モノ)を作るための「設計図」です。この設計図からnewキーワードを使って実際の「オブジェクト(インスタンス)」を生成する際、そのオブジェクトが使用可能な状態になるように... -
C#樹林
【C#】式形式のメンバー(Expression-Bodied Members):=>でメソッドやプロパティを簡潔に書く方法
{ return ...; } の冗長性 C#のクラスでメソッドやプロパティを定義する際、その処理内容が非常に単純な場合があります。 例えば、privateなフィールドの値を返すだけのgetアクセサーや、2つのプロパティを足した結果を返すだけのメソッドなどです。 // 従... -
C#樹林
【C#】paramsキーワード:可変長引数のメソッドを定義する方法
メソッドの引数と「可変長」 C#でメソッドを定義する際、通常は引数の数と型を固定します(例: int Calulate(int a, int b))。 しかし、時には「引数が2個の場合も、5個の場合も、10個の場合も、すべて同じメソッドで処理したい」という要求があります。... -
C#樹林
【C#】メソッドのオーバーロード(Overloading):同名で引数が異なるメソッドを定義する方法
メソッドのオーバーロードとは C#のクラス設計において、同じ名前を持ちながら、引数(パラメータ)の構成が異なるメソッドを複数定義する技術を「メソッドのオーバーロード(Overloading)」と呼びます。 例えば、Console.WriteLine()メソッドは、WriteLi... -
C#樹林
【C#】クラスの「メソッド」を定義する方法:振る舞いを実装する基本
クラスとメソッド(振る舞い) C#の「クラス(class)」は、データ(状態)と振る舞い(アクション)を一つにまとめた設計図です。 データ(状態): privateな「フィールド」やpublicな「プロパティ」で表されます。(例: string Name, int Health) 振る... -
C#樹林
【C#】プロパティとバッキングフィールド:setアクセサーで検証ロジックを実装する方法
自動実装プロパティの利便性と限界 C#のクラス設計において、データを外部に公開する最も簡単な方法は「自動実装プロパティ」を使用することです。 // 自動実装プロパティ public int Quantity { get; set; } この { get; set; } 構文は非常に簡潔ですが、... -
C#樹林
【C#】プロパティの初期化:コンストラクタを省略し宣言時にデフォルト値を設定する方法
プロパティの初期値設定 C#のクラス設計において、プロパティ({ get; set; })がnewでインスタンス化された時点で、nullや0といった型のデフォルト値ではなく、特定の「初期値」を持っていてほしい場合があります。 従来、この初期値の設定は、主にコンス... -
C#樹林
【C#】読み取り専用プロパティを定義する3つの方法 (get;, private set, =>)
読み取り専用プロパティの重要性 C#のクラス設計において「カプセル化」は非常に重要な原則です。これは、クラスの内部データをprivateフィールドで保護し、外部からの不正なアクセスや意図しない変更を防ぐことを意味します。 特に、オブジェクトが一度作... -
C#樹林
【C#】プロパティ(Property)の基本:{ get; set; }によるカプセル化
クラスのデータと「カプセル化」 C#のクラスは、データ(状態)と振る舞い(メソッド)を一つにまとめた設計図です。クラスが持つデータを「フィールド(メンバー変数)」として定義できますが、これをpublic(公開)にしてしまうと、クラスの外部から誰で... -
C#樹林
【C#】クラス(class)の定義と基本:フィールド、プロパティ、コンストラクタ、メソッド
クラスとは:オブジェクト指向の設計図 C#はオブジェクト指向プログラミング(OOP)言語であり、その中心的な概念が「クラス(class)」です。 クラスとは、特定のデータ(状態)と振る舞い(機能)を一つにまとめた「設計図」のようなものです。 クラス (... -
C#樹林
【C#】Queue
の基本:FIFO(先入れ先出し)コレクションの使い方 Queue<T>とは何か? FIFO(先入れ先出し) C#のSystem.Collections.Generic名前空間には、List<T>(動的配列)やStack<T>(スタック)と並び、Queue<T>(キュー)という特定の操作に特化したコレクションが用意されています。 Que... -
C#樹林
【C#】Stack
の基本:LIFO(後入れ先出し)コレクションの使い方 Stack<T>とは何か? LIFO(後入れ先出し) C#のSystem.Collections.Generic名前空間には、List<T>やDictionary<TKey, TValue>の他に、Stack<T>という特定の操作に特化したコレクションがあります。 Stack<T>(スタック)は... -
C#樹林
【C#】HashSet
の集合演算:UnionWith, IntersectWith, ExceptWith の使い方 HashSet<T>と集合演算 HashSet<T>は、重複しない要素を高速に管理(追加、削除、検索)できるC#のコレクションです。 HashSet<T>の真の強力さは、AddやContainsといった基本的な操作だけでなく、数学的な「集合演算」を非常に効率的に実... -
C#樹林
【C#】HashSet
の基本:重複しない要素を高速に管理するコレクション HashSet<T>とは何か? C#のSystem.Collections.Generic名前空間には、List<T>やDictionary<TKey, TValue>といった便利なコレクションが用意されています。その中でもHashSet<T>は、ユニークな(重複しない)要素を管理することに... -
C#樹林
【C#】DictionaryのKeysプロパティですべてのキーを順に処理する方法
Dictionaryとキー(Key) Dictionary<TKey, TValue>は、C#においてキー(Key)と値(Value)をペアで管理するコレクションです。foreachループでDictionary自体を処理すると、KeyValuePair<TKey, TValue>(キーと値の両方を含むオブジェクト)... -
C#樹林
【C#】Dictionary<TKey, TValue>の基本:キーと値のペアを扱うコレクション
Dictionary<TKey, TValue> とは C#においてDictionary<TKey, TValue>は、**キー(Key)と値(Value)**のペアをセットで格納するコレクションです。 List<T>がインデックス(0, 1, 2...)で要素を管理するのに対し、Dictionaryは"Produc... -
C#樹林
【C#】List
.AsReadOnlyメソッドで読み取り専用のビュー(Wrapper)を作成する方法 List<T>を読み取り専用として公開したい System.Collections.Generic.List<T>は、Add, Remove, Insertなどのメソッドを持ち、要素を自由に変更(追加・削除)できる「可変(Mutable)」なコレクションです。 しかし、クラスの内部で管理してい... -
C#樹林
【C#】List
.ForEachとArray.ForEachの使い方:foreachループとの違い foreachループとForEachメソッド C#で配列(T[])やList<T>(ジェネリックリスト)に含まれるすべての要素に対して、何らかの処理を順番に行いたい場合、foreachループ構文を使用するのが最も標準的な方法です。 var items = new List<string>... -
C#樹林
【C#】List
.BinarySearchでソート済みリストを高速に検索する方法 リストの検索とパフォーマンス List<T>(ジェネリックリスト)に格納されたデータから特定の要素を探す際、Containsメソッド、IndexOfメソッド、またはLINQのFirstOrDefaultメソッドを使用するのが一般的です。 これらの方法は非常に直感的ですが、... -
C#樹林
【C#】List
.SortとComparison でリストをカスタム順序で並べ替える方法 List<T>.Sort()の標準動作とその限界 C#のList<T>(ジェネリックリスト)が提供するSort()メソッド(引数なし)は、要素を「昇順」(intなら数値の大小、stringなら辞書順)に並べ替える便利な機能です。 しかし、このデフォルトのルールでは... -
C#樹林
【C#】List
.Sortメソッドでリストの要素を昇順に並べ替える方法 List<T>のソート(並べ替え) C#のList<T>(ジェネリックリスト)は、データを動的に追加・削除できるため非常に便利ですが、格納されたデータを特定の順序(例: 数値の小さい順、アルファベット順)に並べ替えたい(ソートしたい)という要求... -
C#樹林
【C#】List
.Reverseメソッドでリストの要素をその場で逆順にする方法 List<T>の順序反転 C#のList<T>(ジェネリックリスト)に格納された要素の順序を、[A, B, C] から [C, B, A] のように完全に反転させたい場合があります。 List<T>クラスは、この操作を簡単に行うためのReverseというインスタンスメソッ... -
C#樹林
【C#】List
.RemoveAllで条件に一致する全要素を削除する方法 List<T>から複数の要素を削除する C#のList<T>(ジェネリックリスト)は、Remove(T item)メソッド(指定した最初の1要素を削除)やRemoveAt(int index)メソッド(指定したインデックスの要素を削除)を提供しています。 しかし、「リストに含... -
C#樹林
【C#】List
.AddRangeで別のコレクションの要素をまとめて追加する方法 List<T>への要素の追加 C#のList<T>に要素を追加する際、最も基本的な方法はAddメソッドを呼び出すことです。 var users = new List<string>(); users.Add("Alice"); users.Add("Bob"); しかし、もし追加したい要素が既に**別の配列(st... -
C#樹林
【C#】List
を宣言と同時に初期化する方法(コレクション初期化子) List<T>の初期化 System.Collections.Generic.List<T>は、C#において最もよく使われる動的サイズのコレクション(データの集まり)です。 従来、List<T>に初期データを追加するには、インスタンスを作成した後にAddメソッドを繰り返し呼... -
C#樹林
【C#】List
(ジェネリックリスト)の基本的な使い方:配列との違いとAdd, Remove, Count List<T> とは何か? なぜ配列より便利か? C#で複数のデータをまとめて扱う最も基本的な方法は「配列(T[])」です。しかし、配列には「一度作成するとサイズ(要素数)を変更できない」という大きな制約があります。 // 3個の要素しか入らない配列 ... -
C#樹林
【C#】ジャグ配列(配列の配列)の基本的な使い方:初期化とループ処理
ジャグ配列(配列の配列)とは C#には、2次元の表形式データを扱う配列として、「2次元配列(int[,])」と「ジャグ配列(int[][])」の2種類があります。 2次元配列(int[,])が、常に行と列の数が揃った「格子状(グリッド)」のデータ構造であるのに対し...