0Pricing
C# Academy · レッスン

ターゲット型指定された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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. varによるローカル変数の型推論
  2. varを避けるべき場面
  3. dynamic型
  4. ターゲット型指定されたnew式
← C# Academyに戻る