-
C#で配列をコピーする方法|Array.Copyメソッドの使い方を解説
C#では、Array.Copyメソッドを使うことで、ある配列の一部(または全体)を別の配列へ簡単にコピーできます。この記事では、Array.Copyメソッドの基本的な使い方を、サンプルコードと実行結果付きでわかりやすく解説します。配列コピーの基本構造まず、コピー元となる元の配列を用意します。ここでは要素数10個の整数型配列を定義します。int[] n = new int[10]; /* n は 10 個の整数を持つ配列 */次に、コピー先となる新しい配列です。こちらは元の配列の一部を格納するため、要素数は5個にします。int[] m = new int[5]; /* m は 5 個の整数を持つ
-
C#における関連・コンポジション・集約の違いをわかりやすく解説
C#における関連(Association)とは関連(アソシエーション)は、C#においてオブジェクト同士の関係性を定義する基本的な概念です。オブジェクト間には、「1対1」「1対多」「多対1」「多対多」といったさまざまな関係を持たせることができます。たとえば、1人の従業員(Employee)は複数のプロジェクトに関連付けられる一方で、1つのプロジェクトにも複数の従業員が参加できます。これは典型的な「多対多」の関係です。C#におけるコンポジション(Composition)とはコンポジション(合成)は、親オブジェクトが削除されると、それに属する子オブジェクトも存在を失うという、非常に強い依存関係を表し
-
C#のasync・awaitキーワードとは?非同期プログラミングの基本を解説
C#におけるasync・awaitキーワード C#では、asyncとawaitという2つのキーワードを使用することで、シンプルかつ効率的に非同期プログラミングを実現できます。これらのキーワードを活用すると、ネットワーク通信やファイル入出力など時間のかかる処理を実行中でも、アプリケーションのUIをブロックせず、高い応答性を維持できます。 同期処理が引き起こす問題点 GUIアプリケーションは、メッセージキューの内容を常にチェックし、未処理のタスクがあれば取り出して順番に処理していきます。しかし、コードが同期的に実行されると、現在のタスクが完了するまで次の処理に進めません。その結果、処理に予想以上
-
C#のボクシング(Boxing)とアンボクシング(Unboxing)をわかりやすく解説
C#には「値型」と「参照型」という2つの大きな型の分類が存在します。これらの間でデータをやり取りする際に登場するのが、ボクシング(Boxing)とアンボクシング(Unboxing)という変換処理です。本記事では、それぞれの仕組みと具体的なコード例を交えて解説します。 ボクシング(Boxing)とは ボクシングとは、値型(int、double、structなど)を暗黙的に参照型(objectなど)へ変換する処理です。値型の変数をobject型の変数に代入すると、その値はヒープ上に新しいオブジェクトとして確保され、そこにコピーされます。 この変換は明示的なキャストを必要としないため、「暗黙的」な変
-
C#のバックグラウンドスレッドとフォアグラウンドスレッドの違いを徹底解説
スレッド(Thread)とは、プログラムの実行経路を指します。各スレッドは固有の制御フローを持ち、アプリケーション内で複数の処理を並行して実行することを可能にします。C#では、スレッドは大きく「フォアグラウンドスレッド」と「バックグラウンドスレッド」の2種類に分類されます。この2つの違いを理解することは、安定したマルチスレッドアプリケーションを構築するうえで非常に重要です。バックグラウンドスレッドとはバックグラウンドスレッドは、すべてのフォアグラウンドスレッドが終了した時点で、処理が完了していなくても自動的に強制終了されるスレッドです。そのため、ロギングや監視処理など、アプリケーションの終了時
-
C#のBackgroundWorkerクラスとは?主なプロパティと使い方を解説
BackgroundWorkerクラスとはその名の通り、BackgroundWorkerクラスを使用すると、バックグラウンドで継続的に実行されるスレッドを設定し、必要に応じてメインスレッドと通信することができます。BackgroundWorkerを活用することで、Windows Formsアプリケーションにおけるマルチスレッド処理の実装が格段に容易になります。時間のかかる重い処理は別のスレッド上で実行することで、UI(ユーザーインターフェース)がフリーズするのを防ぐことができます。さらに、処理の進行状況や完了をメインスレッドへ通知し、画面を更新することも可能です。BackgroundWorke
-
C#で作る基本の電卓プログラム!Web Formsを使った四則演算の実装方法
C#で電卓プログラムを作成するにはC#で電卓アプリケーションを開発する場合、Web Forms(Windowsフォーム)を利用するのが基本です。フォーム上に「0」から「9」までの数字ボタンや、加算(+)、減算(−)、乗算(×)、除算(÷)などの演算ボタンを配置し、それぞれにクリックイベントの処理を実装していきます。ここでは、加算・減算・乗算の処理を中心に、実際のコードを見ながら解説していきます。変数の宣言まず、計算に使用する2つの変数を宣言します。ここではfloat型の静的変数として定義しています。static float x, y;変数xにはユーザーが入力した数値を、変数yには押された演算子
-
C#のBigIntegerクラスとは?巨大な数値を扱う方法と主なコンストラクタを解説
C#で通常の整数型(int や long)では表現できない非常に大きな数値を扱いたい場合には、BigInteger 構造体を使用します。BigInteger を利用するには、プロジェクトに System.Numerics アセンブリへの参照を追加する必要があります。BigInteger は System.Numerics.BigInteger 名前空間に定義されており、理論上はメモリが許す限り無限に近い大きさの整数を扱うことができます。暗号処理や科学技術計算など、桁あふれ(オーバーフロー)を気にせず正確な計算を行いたい場面で特に役立ちます。BigInteger の構文BigInteger の宣
-
C#で二分探索(バイナリサーチ)を実装する方法|仕組みと計算量を解説
二分探索とは二分探索(バイナリサーチ)は、ソート済みの配列を対象とした高速な検索アルゴリズムです。探索したい値を配列の中央にある要素と比較し、一致しなかった場合は、その値が存在し得ない側の半分の領域を丸ごと除外します。この操作を残りの半分に対して繰り返すことで、効率よく目的の値を見つけ出します。例えば、下図のような配列から「62」という値を探す場合を考えてみましょう。中央の要素との比較結果から、62が存在するのは右側の領域だけであることが分かるため、左半分は完全に除外され、以降は右半分のみが探索対象となります。二分探索の計算量二分探索における各ケースの計算量は以下の通りです。最悪時間計算量O(
-
C#で2進数を10進数に変換する方法を解説
C#で2進数を10進数に変換する方法はいくつかありますが、ここではwhileループを使った基本的なアルゴリズムを紹介します。この方法では、入力された2進数の各桁の余り(剰余)を求め、その余りに基数(2のべき乗)を掛けて順次加算していくことで、10進数の値を算出します。変換の仕組み2進数「1010」を例に考えてみましょう。各桁を右から順に取り出し、それぞれに1、2、4、8という基数を掛けて合計します。具体的には以下のような流れになります。最下位の桁(余り)を val % 10 で取得する余りに現在の基数値を掛けて10進数の結果に加算するval / 10 で処理済みの桁を取り除く基数値を2倍して次
-
C#のビット単位右シフト演算子(>>)の使い方をわかりやすく解説
ビット単位右シフト演算子とは ビット演算子(Bitwise Operator)は、数値をビット単位で扱い、1ビットずつ操作を行う演算子です。その中でもビット単位の右シフト演算子「>>」は、左側のオペランドの値を、右側のオペランドで指定されたビット数だけ右へ移動させる働きを持ちます。 たとえば、次のような値があったとしましょう。 60(2進数:0011 1100) この値に対して、右へ2ビットシフトするには次のように記述します。 c = a >> 2; 2回の右シフトが行われると、値は次のように変化します。 15(2進数:0000 1111) これは、各ビットが右に移動し
-
C#で数値の2進数表現が回文かどうかを判定する方法
はじめに:回文(パリンドローム)とは回文とは、前から読んでも後ろから読んでも同じになる文字列や数列のことです。本記事では、数値を2進数(バイナリ)で表現したときに、それが回文になっているかどうかをC#で判定する方法を解説します。例として、数値「5」を考えてみましょう。5の2進数表現は次のとおりです。101「101」はビットを反転しても「101」のまま変わらないため、回文であることがわかります。この判定を行うには、ビットを逆順に並べ替える関数を実装します。ここでは、ビット単位の左シフト演算子(<<)と右シフト演算子(>>)を使用します。ビットを反転する関数 funcRev
-
C#で2進数にK個の連続した1が存在するかを判定する方法
2進数にK個の連続した1が含まれるかどうかの判定2進数の中に連続した「1」が何個並んでいるかを調べるには、配列内の「0」と「1」を先頭から順番に走査し、連続する1の数をカウントしていく方法が有効です。基本的な考え方まず、0と1(falseとtrue)を表すbool型の配列を用意します。bool[] myArr = {false, true, false, false, false, true, true, true};要素が0(false)の場合は、それまでの連続カウントをリセットします。if (myArr[i] == false) count
-
整数を文字列に変換するC#プログラムの書き方
C#で整数(int型)を文字列(string型)に変換するには、ToString()メソッドを使用します。このメソッドは、すべての数値型が持つ標準的なメソッドで、呼び出すだけで簡単に文字列表現を取得できます。基本的な変換手順1. 変換したい整数を用意するまず、文字列に変換したい整数値を変数に格納します。int num = 299;2. ToString()メソッドで変換する次に、ToString()メソッドを呼び出して、整数を文字列に変換します。String s; int num = 299; s = num.ToString();完全なサンプルコード以下のコードを実行すると、整数を文字列に変
-
C#で現在のスレッドの状態(IsAlive)を確認する方法
C#で現在実行中のスレッドの状態を確認するには、IsAlive プロパティを使用します。このプロパティは、スレッドが起動されており、まだ終了していない場合に True を返します。スレッド情報の取得まず、CurrentThread プロパティを使って、現在実行中のスレッドの情報を取得します。Thread thread = Thread.CurrentThread;次に、取得したスレッドオブジェクトに対して IsAlive プロパティを参照することで、スレッドの状態を確認できます。thread.IsAliveサンプルコード以下は、C#で現在のスレッドの状態を確認する完全なコード例です。スレッドに
-
C#で学ぶバブルソート:アルゴリズムの仕組みと実装コードをわかりやすく解説
バブルソート(Bubble Sort)は、最も基本的なソートアルゴリズムの一つです。隣り合う要素同士を順番に比較し、順序が正しくなければ入れ替えるという操作を繰り返すことで、配列全体を整列させます。比較ベースのシンプルな手法であり、初心者がソートの考え方を理解するのに最適なアルゴリズムです。バブルソートの動作イメージここでは、次の5つの要素を持つint型配列を例に、バブルソートの手順を見ていきましょう。int[] arr = { 78, 55, 45, 98, 13 };1回目のパス(反復処理)まず、先頭の2つの要素「78」と「55」を比較します。55は78より小さいため、両者を入れ替えます。
-
C#で多重継承を実現する方法:インターフェースを使った実装ガイド
C#における多重継承の基本C#では、クラスに対する多重継承(Multiple Inheritance)はサポートされていません。これは、複数の基底クラスを持つことで発生しうる曖昧性(いわゆる「ダイヤモンド継承問題」)を避けるための言語設計上の判断です。しかし、インターフェース(Interface)を利用することで、多重継承と同等の機能を実現できます。1つのクラスは複数のインターフェースを実装できるため、異なる機能を柔軟に組み合わせることが可能です。インターフェース「PaintCost」の定義まず、塗料コストを計算するためのインターフェース PaintCost を定義します。このインターフェース
-
C#の匿名メソッド(Anonymous Method)とは?基本構文と実装例をわかりやすく解説
C#における匿名メソッド(Anonymous Method)は、名前を持たないメソッド本体だけのコードブロックを、デリゲートのパラメータとして直接渡すための手法です。簡単な処理をその場で定義したい場合に便利で、わざわざ別途メソッドを宣言する必要がありません。匿名メソッドの宣言方法匿名メソッドは、delegateキーワードを使って次のように宣言します。delegate void NumberChanger(int n); ... NumberChanger nc = delegate(int x) { Console.WriteLine(Anonymous Method: {0}, x)
-
C#における階層継承(Hierarchical Inheritance)の基本と実装例
階層継承とは 階層継承とは、オブジェクト指向プログラミングにおける継承の一形態で、1つの基底クラスから2つ以上の派生クラスが継承される構造を指します。C#では、クラス名の後にコロン「:」と基底クラス名を記述するだけで、簡単に継承関係を定義できます。 本記事の例では、基底クラスとして Father クラスを定義し、そこから Son クラスと Daughter クラスという2つの派生クラスを作成します。 基底クラスの定義 まずは基底クラスとなる Father クラスです。このクラスには、メッセージを表示するだけのシンプルな display() メソッドを持たせています。 class Father
-
C#で文字列に部分文字列が存在するかどうかをチェックする方法
C#ではContains()メソッドを使うことで、指定した文字列の中に部分文字列が含まれているかどうかを簡単に確認できます。まず、次のような文字列があるとします。Unitedこの文字列の中から「Uni」という部分文字列を見つけたい場合、Containsメソッドを以下のように使用します。res = str1.Contains(str2);ContainsメソッドのポイントContainsメソッドは、引数に渡した文字列が元の文字列内に存在すれば true を、存在しなければ false を返します。なお、比較の際には大文字・小文字が区別されるため、「uni」や「UNI」を検索した場合には一致しない