ターゲット型指定されたnew式
ターゲット型指定でオブジェクト作成を簡潔にします。
「ターゲット型指定されたnew式」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
ターゲット型指定の new
C# 9 以降では、対象の型が分かっている場合、Type x = new(); のように記述して new の後の型を省略できます。
using System;
using System.Collections.Generic;
class Program {
static void Main() {
List<int> numbers = new();
numbers.Add(1);
Console.WriteLine(numbers.Count);
}
}重複をなくす
変数にすでに型が記述されている場合、new の後でもう一度型を記述するのは冗長です。空の new() によって省略できます。
using System;
using System.Text;
class Program {
static void Main() {
StringBuilder sb = new();
sb.Append("Hi");
Console.WriteLine(sb.ToString());
}
}コンストラクター引数の指定
ターゲット型指定の new() でも、かっこの中にコンストラクター引数を指定できます。
using System;
class Point {
public int X, Y;
public Point(int x, int y) { X = x; Y = y; }
}
class Program {
static void Main() {
Point p = new(3, 4);
Console.WriteLine(p.X + ", " + p.Y);
}
}オブジェクト初期化子との組み合わせ
ターゲット型指定の new は、オブジェクト初期化子ブロックと組み合わせることもできます。
using System;
class User {
public string Name;
public int Age;
}
class Program {
static void Main() {
User u = new() { Name = "Ann", Age = 30 };
Console.WriteLine(u.Name + " " + u.Age);
}
}フィールドでの使用
ターゲット型指定の new はフィールド初期化子でも使えるため、宣言を簡潔に保てます。
using System;
using System.Collections.Generic;
class Program {
static List<string> items = new();
static void Main() {
items.Add("a");
Console.WriteLine(items.Count);
}
}メソッド引数での使用
パラメーターの型が分かっている場合は、引数として new() を直接渡せます。
using System;
using System.Collections.Generic;
class Program {
static void Print(List<int> list) {
Console.WriteLine(list.Count);
}
static void Main() {
Print(new());
}
}new() を返す
メソッドの戻り値の型が分かっている場合は、型名を繰り返さずに new() を返せます。
using System;
using System.Collections.Generic;
class Program {
static List<int> Make() {
return new() { 1, 2, 3 };
}
static void Main() {
Console.WriteLine(Make().Count);
}
}var との違い
var x = new List<int>() では右辺に型を記述し、List<int> x = new() では左辺に型を記述します。読みやすいほうを選んでください。
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var a = new List<int>();
List<int> b = new();
Console.WriteLine(a.Count + b.Count);
}
}あいまいな場合はエラーになる
コンパイラが対象の型を特定できない場合、new() は失敗します。コンテキストから型が明確でなければなりません。
using System;
class Program {
static void Main() {
object o = new object();
Console.WriteLine(o.GetType().Name);
}
}長い型での可読性
ターゲット型指定の new は、冗長なジェネリック型で特に便利です。型を二度記述せずに済みます。
using System;
using System.Collections.Generic;
class Program {
static void Main() {
Dictionary<string, List<int>> map = new();
map["a"] = new() { 1, 2 };
Console.WriteLine(map["a"].Count);
}
}現代的なスタイル
ターゲット型指定の new は、完全な静的型付けとコンパイラのチェックを保ちながら、宣言をすっきりさせます。
using System;
using System.Collections.Generic;
class Program {
static void Main() {
Queue<string> q = new();
q.Enqueue("first");
Console.WriteLine(q.Dequeue());
}
}理解度チェック
ターゲット型指定の new 式について理解できているか確認しましょう。
まとめ
ターゲット型指定の new() を使うと、対象の型がすでに分かっている場合に new の後の型を省略できます。宣言、フィールド、引数、戻り値での重複を減らせます。
コンストラクター引数や初期化子も引き続き指定でき、型があいまいな場合は失敗します。また、var と組み合わせて使える、現代的で完全に型安全なスタイルです。
よくある質問
「ターゲット型指定されたnew式」レッスンは無料ですか?
はい。「ターゲット型指定されたnew式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「ターゲット型指定されたnew式」で何を学びますか?
ターゲット型指定でオブジェクト作成を簡潔にします。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ターゲット型指定されたnew式」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- varによるローカル変数の型推論
- varを避けるべき場面
- dynamic型
- ターゲット型指定されたnew式