13,000
回編集
細 (Wiki がページ「その他 - C Sharpのバージョン」を「C Sharpその他 - C Sharpのバージョン」に、リダイレクトを残さずに移動しました) |
細 (文字列「<source」を「<syntaxhighlight」に置換) |
||
42行目: | 42行目: | ||
<br> | <br> | ||
記述方法は、var(型推論)と似ているが、dynamicキーワードで宣言した変数の型は動的型になる。<br> | 記述方法は、var(型推論)と似ているが、dynamicキーワードで宣言した変数の型は動的型になる。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
var sx = 1; // int型 | var sx = 1; // int型 | ||
dynamic dx = 1; // dynamic型 | dynamic dx = 1; // dynamic型 | ||
49行目: | 49行目: | ||
C# 3.0以前のような静的型付け言語では、オブジェクトがどのような名前のプロパティやメソッドを持っているかをコンパイル時に知る必要がある。<br> | C# 3.0以前のような静的型付け言語では、オブジェクトがどのような名前のプロパティやメソッドを持っているかをコンパイル時に知る必要がある。<br> | ||
以下の例では、<code>'object' に 'X' の定義が含まれていません</code>というエラーが発生する。<br> | 以下の例では、<code>'object' に 'X' の定義が含まれていません</code>というエラーが発生する。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
static object GetX(object obj) | static object GetX(object obj) | ||
{ | { | ||
58行目: | 58行目: | ||
C# 4.0以降では、dynamic型を使用することで、以下のように記述できる。<br> | C# 4.0以降では、dynamic型を使用することで、以下のように記述できる。<br> | ||
変数objがXというプロパティを持っているかは、プログラム実行時に調べる。<br> | 変数objがXというプロパティを持っているかは、プログラム実行時に調べる。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
static dynamic GetX(dynamic obj) | static dynamic GetX(dynamic obj) | ||
{ | { | ||
73行目: | 73行目: | ||
以下のように、規定値を持つメソッドを定義すると、引数の一部または全てを省略することができる。(オプション引数と呼ぶ)<br> | 以下のように、規定値を持つメソッドを定義すると、引数の一部または全てを省略することができる。(オプション引数と呼ぶ)<br> | ||
この記法において、省略できるものは後の引数のみである。<br> | この記法において、省略できるものは後の引数のみである。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
static int Sum(int x = 0, int y = 0, int z = 0) | static int Sum(int x = 0, int y = 0, int z = 0) | ||
{ | { | ||
88行目: | 88行目: | ||
名前付き引数は、引数の順番は自由に記述できる。<br> | 名前付き引数は、引数の順番は自由に記述できる。<br> | ||
また、任意の箇所を省略することができる。<br> | また、任意の箇所を省略することができる。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
int s1 = Sum(x: 1, y: 2, z: 3); // Sum(1, 2, 3); と同じ | int s1 = Sum(x: 1, y: 2, z: 3); // Sum(1, 2, 3); と同じ | ||
int s2 = Sum(y: 1, z: 2, x: 3); // Sum(3, 1, 2); と同じ | int s2 = Sum(y: 1, z: 2, x: 3); // Sum(3, 1, 2); と同じ | ||
101行目: | 101行目: | ||
ジェネリクスの共変性と反変性を実現するため、ジェネリクスの型引数に対して、in / outを指定する。<br> | ジェネリクスの共変性と反変性を実現するため、ジェネリクスの型引数に対して、in / outを指定する。<br> | ||
出力(戻り値またはプロパティのget)でのみ使用する場合は、型にoutを記述することで共変性が認められる。<br> | 出力(戻り値またはプロパティのget)でのみ使用する場合は、型にoutを記述することで共変性が認められる。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public interface IEnumerable<out T> { ... } | public interface IEnumerable<out T> { ... } | ||
IEnumerable<string> strings = new[] {"aa", "bb", "cc"}; | IEnumerable<string> strings = new[] {"aa", "bb", "cc"}; | ||
111行目: | 111行目: | ||
<br> | <br> | ||
入力(引数またはプロパティのset)でのみ使用する場合は、型にinを記述することで反変性が認められる。<br> | 入力(引数またはプロパティのset)でのみ使用する場合は、型にinを記述することで反変性が認められる。<br> | ||
< | <syntaxhighlight lang="csharp"> | ||
public delegate void Action<in T> (T arg); | public delegate void Action<in T> (T arg); | ||
Action<object> objAction = x => { Console.Write(x); }; | Action<object> objAction = x => { Console.Write(x); }; |