こんにちは、Takymです。
今回は前回のC#を1.0~7.0までのバージョンを比較してみる。その1続きです。
C# 1.0 vs C# 2.0
前回、書くことができなかった部分を紹介します。
Partial Type
これは、クラスを複数のファイルに分割して書くことができる機能です。
partial class Test
{
public Test()
{
SayHello();
}
}
partial class Test
{
public void SayHello()
{
Console.WriteLine("hello");
}
}
この機能はC# 1.0で使用する事ができません。
Nullable型
これは、構造体の型名の後ろに?を付けてnull値を使用できるようにするものです。
(この機能、昔からあったのか。意外だなぁ)
int? a = null;
しかし、C# 1.0でこの機能を使用したい場合は、以下の様に必ずクラスを作成しなければなりません。
public class NullableInt32
{
public int Value;
}
それ以外にも新機能はありますがここでは割愛します。
C# 2.0 vs C# 3.0
今度は、C# 2.0とC# 3.0を比べてみたいと思います。
暗黙的型付け
以下の様にvarを使用すると、コンパイラが型を判断してくれます。
var num = 123; var str = "Test"; var bol = true; var flo = 1.5F;
この機能は、C# 1.0、C# 2.0では使用できません。
拡張メソッド
静的メソッドの最初の引数にthisを付けると、あたかもインスタンスメソッドの様に使用する事ができます。
public static class StringExtensions
{
public static string AddString(this string left, string right)
{
return left + right;
}
// 別にAddStringと同じクラスにする必要はない。
public static void Main()
{
string str = "abc";
// C# 1.0、C# 2.0の場合
string str2 = StringExtensions.AddStriong(str, "def");
// C# 3.0以降の場合
string str3 = str.AddStriong("def");
}
}
ラムダ式
これは、匿名メソッドの進化版みたいなものです。
C# 2.0では以下の様に記述しなければいけませんでした。
Func f = delegate(string str)
{
return str.Replace("abc", "123");
};
Console.WriteLine(f("abcdef")); // 出力:123def
しかし、C# 3.0では以下の様に記述する事ができます。
Func f = (string str) =>
{
return str.Replace("abc", "123");
};
Console.WriteLine(f("abcdef")); // 出力:123def
とりあえず、今回はここまでです。
最後まで読んでくれてありがとうございました。
分からない事、間違い等はこの記事にコメントしてください。
参考にしたページ①:C# 2.0 の新機能 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
参考にしたページ②:C# 3.0 の新機能 – C# によるプログラミング入門 | ++C++; // 未確認飛行 C
次回の記事が完成しました。以下のリンクから次回の記事ページに行くことができます。
C#を1.0~7.0までのバージョンを比較してみる。その3
目次ページできました。→http://takymsystems.blog.fc2.com/blog-entry-18.html