C# 7.0のデコンストラクター(Deconstruct)とは?基本と使い方を解説
デコンストラクターとは
C# 7.0で導入されたデコンストラクター(Deconstructor)は、オブジェクトをその構成要素へ分解するための機能です。コンストラクターがオブジェクトを「組み立てる」のに対し、デコンストラクターはその逆で、オブジェクトから個々の値を取り出して変数に割り当てることができます。
主な特徴
- 同一プログラム内に、outパラメータの数が同じデコンストラクターメソッドを複数定義できます。また、パラメータの数と型が同じであっても、順序が異なるものは許可されます。
- デコンストラクターは新しいタプル構文の一部です。
Tuple<>クラスとは無関係で、関数型プログラミングから着想を得た機能です。 - デコンストラクターには
Deconstructという名前のメソッドを使用します。
コード例
以下の例では、Employee クラスに Deconstruct メソッドを定義し、Mainメソッド内でタプル形式の分解構文を使って各プロパティの値を取り出しています。
public class Employee{ public Employee(string employeename, string firstName, string lastName){ Employeename = employeename; FirstName = firstName; LastName = lastName; } public string Employeename { get; } public string FirstName { get; } public string LastName { get; } public void Deconstruct(out string employeename, out string firstName, out string lastName){ employeename = Employeename; firstName = FirstName; lastName = LastName; }}class Program{ public static void Main(){ Employee employee = new Employee("emp", "fname", "lname"); (string EName, string Fname, string Lname) = employee; System.Console.WriteLine(EName); System.Console.WriteLine(Fname); System.Console.WriteLine(Lname); Console.ReadLine(); }}ポイントは (string EName, string Fname, string Lname) = employee; の部分です。このように記述すると、コンパイラが自動的に Deconstruct メソッドを呼び出し、オブジェクトの状態を個々の変数へ展開します。
出力結果
emp fname lname
まとめ
デコンストラクターを使うことで、オブジェクトのプロパティを簡潔な構文で個別の変数に取り出せます。特にタプルやパターンマッチングと組み合わせることで、C#のコードをより読みやすく、関数型的なスタイルで書くことが可能になります。
-
C#の正規表現とは?基本概念とRegexクラスの使い方をわかりやすく解説
正規表現とは、入力テキストと照合(マッチング)を行うためのパターンのことです。.NETフレームワークには、このような照合を実現する正規表現エンジンが組み込まれており、開発者はこれを利用して高度な文字列操作を行えます。パターンは、1つ以上の文字リテラル、演算子、または構成要素から構成されます。これらを組み合わせることで、「特定の文字で始まる単語」「メールアドレス形式の文字列」など、柔軟な条件での文字列検索が可能になります。正規表現の基本的な使い方例えば、「S」で始まる単語を抽出したい場合は、次のようにC#で正規表現を使用します。コード例using System; using System.Tex
-
Java 9のコンパクト文字列(Compact Strings)とは?仕組みと内部実装の変化を解説
コンパクト文字列(Compact Strings)の概要Java 9以降、JVMはコンパクト文字列(Compact Strings)と呼ばれる新機能によって、文字列のメモリ使用量を最適化するようになりました。従来のchar[]配列の代わりに、文字列をbyte[]配列として表現できるようになったのが最大の特徴です。エンコーディングにはUTF-16またはLatin-1(ISO-8859-1)が使用され、これにより1文字あたり1バイトまたは2バイトで文字を格納できます。JVMがその文字列にISO-8859-1/Latin-1の範囲内の文字のみが含まれていることを検出した場合、内部的には1文字あたり1