この章では、「ジェネリック」「匿名型」「デリゲート」「ラムダ式」「LINQ」といった機能を紹介します。
C#には、より効率的なプログラミングをするための様々な機能があります。
この章では、その中でも「ジェネリック」「匿名型」「デリゲート」「ラムダ式」「LINQ」といった、応用編にふさわしい機能について詳しく解説します。
「C#基礎講座」の最終章です。この講座の詳細については以下から確認できます。
全てのサンプルプログラムのダウンロードは0章でダウンロードできます。
ジェネリックの解説と使い方
ジェネリックは型をパラメータ化することで、汎用的なメソッドやクラスを作成するための機能です。
ジェネリックを使用することで同じような処理を異なる型に対しても、同じメソッドやクラスを使用することができます。
ジェネリックは、<T> のように小文字の T を使用して型パラメータを表します。ジェネリックを使用することで、非常に柔軟なコードを書くことができます。
例えば、リストを扱うクラスを作成する際には、ジェネリックを使用することで、整数のリストだけでなく文字列のリストや、自作クラスのリストなど、様々な型のリストを扱うことができます。
using System;
using System.Collections.Generic;
namespace MyNameSpace
{
class MyClass
{
class MyList<T>
{
private List<T> list = new List<T>();
public void Add(T value)
{
list.Add(value);
}
public T this[int index]
{
get { return list[index]; }
set { list[index] = value; }
}
}
static void Main(string[] args)
{
MyList<int> intList = new MyList<int>();
intList.Add(3);
intList.Add(4);
Console.WriteLine(intList[0]); // 3
Console.WriteLine(intList[1]); // 4
MyList<string> stringList = new MyList<string>();
stringList.Add("Hello");
stringList.Add("World");
Console.WriteLine(stringList[0]); // Hello
Console.WriteLine(stringList[1]); // World
}
}
}
上記のサンプルプログラムでは、MyList<T> クラスがジェネリッククラスであることを示しています。
Tはジェネリックパラメータであり、このクラスは、int型のリストや、string型のリストなど様々な型のリストを扱うことができます。
匿名型の解説と使い方
匿名型は名前を持たない型を作成するための機能です。
匿名型は自動的にプロパティ名がフィールド名になり、それぞれのプロパティにアクセスするためのgetアクセス子が生成されます。匿名型を使用することで、一時的なデータを扱うための型を作成することができます。
例えば、複数のテーブルを結合しその結果を一時的に保存するための型を作成することができます。
var person = new { Name = "John", Age = 20 };
Console.WriteLine(person.Name); // John
Console.WriteLine(person.Age); // 20
上記のサンプルプログラムでは、var person = new { Name = “John”, Age = 20 }; のように、名前を持たない型を作成し、NameプロパティやAgeプロパティにアクセスしています。
デリゲートの解説と使い方
デリゲートは、任意のメソッドを参照するためのオブジェクトです。
デリゲートは、関数ポインタのように扱うことができ、イベントハンドラや、任意のメソッドを呼び出すために使用されます。
デリゲートを使用することで、任意のメソッドを呼び出すことができます。
またイベントハンドラや、非同期処理など、コールバックメソッドを使用することができます。
デリゲートは、delegateキーワードを使用して宣言します。また、Func<>やAction<>などのジェネリックデリゲートを使用することもできます。
delegate int MyDelegate(int a, int b);
static int Add(int a, int b) {
return a + b;
}
static int Multiply(int a, int b) {
return a * b;
}
static void Main() {
MyDelegate del1 = Add;
MyDelegate del2 = Multiply;
Console.WriteLine(del1(3, 4)); // 7
Console.WriteLine(del2(3, 4)); // 12
}
上記のサンプルプログラムでは、delegateを使用して、MyDelegate型のdel1、del2を宣言し、それぞれAdd、Multiplyメソッドを参照しています。del1、del2を呼び出すことで、Add、Multiplyメソッドを呼び出すことができます。
ラムダ式の解説と使い方
ラムダ式は、匿名関数を定義するための構文です。
ラムダ式は、delegateやFunc<>、Action<>などと組み合わせて使用することで、簡潔なコードを書くことができます。
ラムダ式は、アロー演算子=>
を使用して、入力引数と処理を結びつけます。ラムダ式を使用することで、匿名メソッドを簡潔に記述することができ、コードをスッキリさせることができます。
Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(3, 4)); // 7
Action<string> print = s => Console.WriteLine(s);
print("Hello World"); // Hello World
上記のサンプルプログラムでは、Func<int, int, int>型のaddを宣言し、ラムダ式 (a, b) => a + b を代入しています。
add変数は、(int a, int b) => int の型を持つ関数を表します。また、Action<string>型のprintを宣言し、ラムダ式 s => Console.WriteLine(s) を代入しています。
print変数は、(string s) => void の型を持つ関数を表します。
LINQの解説と使い方
LINQ(Language Integrated Query)は、C#に組み込まれたクエリ言語です。
LINQを使用することで、コレクションデータに対してSQLのような構文でデータを抽出、操作することができます。LINQは「from句」「where句」「select句」などを使用してクエリを構築します。
LINQの使用には、「System.Linq」のusing宣言が必要です。
using System.Linq;
LINQを使用することで、コレクションデータを効率良く操作することができます。また、LINQは、データベースにも適用することができ統一された構文でデータ操作を行うことができます。
using System;
using System.Linq;
namespace MyNameSpace
{
class MyClass
{
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5 };
var result = from n in numbers
where n % 2 == 0
select n;
foreach (var r in result)
{
Console.WriteLine(r);
}
}
}
}
上記のサンプルプログラムでは、LINQを使用して、numbers配列から偶数だけを抽出し、result変数に格納しています。
from句、where句、select句を使用して、クエリを構築しています。foreach文を使用して、result変数から取り出し、それぞれの要素を表示しています。
解いてみよう!3択クイズ
1.ジェネリックは何を目的としているか?
- 型を変更すること
- 汎用的なメソッドやクラスを作成すること
- 特定の型だけを扱うこと
解答
答え: 2.汎用的なメソッドやクラスを作成すること
解説: ジェネリックは、汎用的なメソッドやクラスを作成するための機能であり、特定の型だけを扱うことではなく、様々な型を扱うことができるようにすることが目的です。
1.匿名型はどのようにアクセスすることができるか?
- 名前を使用してアクセスする
- プロパティ名を使用してアクセスする
- インデックスを使用してアクセスする
解答
答え: 2.プロパティ名を使用してアクセスする
解説: 匿名型は、名前を持たない型であり、プロパティ名を使用してアクセスすることができます。
1.デリゲートは何を指しているか?
- 任意のオブジェクト
- 任意の関数
- 任意のメソッド
解答
答え: 2.任意の関数
解説: デリゲートは、任意の関数を指します。 delegate キーワードを使用して宣言し、それを任意の関数に割り当てることができます。
1.ラムダ式はどのような関数を定義するための構文か?
- 名前を持つ関数
- 匿名関数
- 特定の型を持つ関数
解答
答え: 2.匿名関数
解説: ラムダ式は、匿名関数を定義するための構文です。 ラムダ式は、FuncやActionなどのデリゲート型に割り当てることができ、無名メソッドを表現することができます。
1.LINQは何を行うためのクエリ言語か?
- アドレスに対するクエリ
- コレクションデータに対するクエリ
- ハイパーリンクを扱うクエリ
解答
答え: 2.コレクションデータに対するクエリ
解説: LINQは、コレクションデータに対するクエリを行うためのクエリ言語で、from句、where句、select句などを使用して、クエリを構築することができます。また、データベースにも適用することができ、統一された構文でデータ操作を行うことができます。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
この章のまとめ
この章で学んだことを以下にまとめます。
- ジェネリックを使用することで、汎用的なメソッドやクラスを作成できる。
- 匿名型を使用することで、名前を持たない型を作成できる。
- デリゲートを使用することで、任意のメソッドを参照できる。
- ラムダ式を使用することで、簡潔なコードで匿名関数を定義できる。
- LINQを使用することで、SQLのような構文でコレクションデータを操作できる。
これらの「ジェネリック」「匿名型」「デリゲート」「ラムダ式」「LINQ」はとても便利で、応用編にふさわしい機能だと思いました。
ただ、非常に難しかったので使いこなせるようになるには時間がかかりそうです。
この章で学んだ内容は、知っていなくてもプログラミング自体は可能です。より効率的に開発を行う必要があったり、これらを記述しているコードのメンテナンスが必要な場合などに改めて確認しながら少しずつ身に付けていくと良いでしょう。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
終わりに
これで、C#基礎講座の内容は終了です。皆様おつかれさまでした!かなり濃い内容だったと思います。
この講座の内容ができるようになっていればC#の基礎構文は十分マスターできています。
あとは、開発するアプリによって必要なデータベースやライブラリ、Windowsフォームといった知識を必要に応じて身につけることでC#を使った様々なアプリ開発ができるようになります。
この講座で分からなかった箇所は都度見直して少しずつ身につけていきましょう。覚えることよりも必要に応じて調べられるようになっていることが重要です。
テクリエイトアカデミーでは他にも様々な初学者向けの講座を無料でご用意しています。もし興味があればぜひ確認してみてください。
コメント