「C Sharpその他 - C Sharpのバージョン」の版間の差分

ナビゲーションに移動 検索に移動
文字列「<source」を「<syntaxhighlight」に置換
(Wiki がページ「その他 - C Sharpのバージョン」を「C Sharpその他 - C Sharpのバージョン」に、リダイレクトを残さずに移動しました)
(文字列「<source」を「<syntaxhighlight」に置換)
42行目: 42行目:
<br>
<br>
記述方法は、var(型推論)と似ているが、dynamicキーワードで宣言した変数の型は動的型になる。<br>
記述方法は、var(型推論)と似ているが、dynamicキーワードで宣言した変数の型は動的型になる。<br>
  <source lang="csharp">
  <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>
  <source lang="csharp">
  <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>
  <source lang="csharp">
  <syntaxhighlight lang="csharp">
  static dynamic GetX(dynamic obj)
  static dynamic GetX(dynamic obj)
  {
  {
73行目: 73行目:
以下のように、規定値を持つメソッドを定義すると、引数の一部または全てを省略することができる。(オプション引数と呼ぶ)<br>
以下のように、規定値を持つメソッドを定義すると、引数の一部または全てを省略することができる。(オプション引数と呼ぶ)<br>
この記法において、省略できるものは後の引数のみである。<br>
この記法において、省略できるものは後の引数のみである。<br>
  <source lang="csharp">
  <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>
  <source lang="csharp">
  <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>
  <source lang="csharp">
  <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>
  <source lang="csharp">
  <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); };

案内メニュー