0Pricing
C# Academy · Lekcja

Wyrażenia new z typem docelowym

Upraszczaj tworzenie obiektów dzięki wnioskowaniu typu docelowego.

Wyrażenia new z typem docelowym to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

new z typem docelowym

Od wersji C# 9 można zapisać Type x = new(); i pominąć typ po new, gdy typ docelowy jest znany.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        List<int> numbers = new();
        numbers.Add(1);
        Console.WriteLine(numbers.Count);
    }
}

Usuwanie powtórzeń

Gdy zmienna już określa typ, powtarzanie go po new jest zbędne. Puste new() pozwala je pominąć.

using System;
using System.Text;

class Program {
    static void Main() {
        StringBuilder sb = new();
        sb.Append("Hi");
        Console.WriteLine(sb.ToString());
    }
}

Przekazywanie argumentów konstruktora

Wyrażenie new() z typem docelowym nadal przyjmuje argumenty konstruktora w nawiasach.

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);
    }
}

Z inicjalizatorami obiektów

Można połączyć new z typem docelowym z blokiem inicjalizatora obiektu.

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);
    }
}

W polach

Wyrażenie new z typem docelowym działa również w inicjalizatorach pól, zachowując zwięzłość deklaracji.

using System;
using System.Collections.Generic;

class Program {
    static List<string> items = new();
    static void Main() {
        items.Add("a");
        Console.WriteLine(items.Count);
    }
}

W argumentach metod

Gdy parametr ma znany typ, można bezpośrednio przekazać new() jako argument.

using System;
using System.Collections.Generic;

class Program {
    static void Print(List<int> list) {
        Console.WriteLine(list.Count);
    }
    static void Main() {
        Print(new());
    }
}

Zwracanie new()

Jeśli typ zwracany przez metodę jest znany, można zwrócić new() bez powtarzania nazwy typu.

using System;
using System.Collections.Generic;

class Program {
    static List<int> Make() {
        return new() { 1, 2, 3 };
    }
    static void Main() {
        Console.WriteLine(Make().Count);
    }
}

Porównanie z var

var x = new List<int>() określa typ po prawej stronie, a List<int> x = new() określa go po lewej. Należy wybrać zapis, który jest czytelniejszy.

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);
    }
}

Niejednoznaczność powoduje błąd

Jeśli kompilator nie może określić typu docelowego, wyrażenie new() kończy się błędem. Typ docelowy musi jasno wynikać z kontekstu.

using System;

class Program {
    static void Main() {
        object o = new object();
        Console.WriteLine(o.GetType().Name);
    }
}

Czytelność przy długich typach

Wyrażenie new z typem docelowym jest szczególnie przydatne w przypadku rozbudowanych typów generycznych, ponieważ pozwala uniknąć zapisywania typu dwa razy.

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);
    }
}

Nowoczesny styl

Wyrażenie new z typem docelowym zachowuje przejrzystość deklaracji, jednocześnie zapewniając pełne typowanie statyczne i sprawdzanie przez kompilator.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        Queue<string> q = new();
        q.Enqueue("first");
        Console.WriteLine(q.Dequeue());
    }
}

Szybkie sprawdzenie

Proszę sprawdzić zrozumienie wyrażeń new z typem docelowym.

Podsumowanie

Wyrażenie new() z typem docelowym pozwala pominąć typ po new, gdy typ docelowy jest już znany, ograniczając powtórzenia w deklaracjach, polach, argumentach i wartościach zwracanych.

Nadal przyjmuje argumenty konstruktora i inicjalizatory, kończy się błędem, gdy typ jest niejednoznaczny, oraz uzupełnia var jako nowoczesny i w pełni bezpieczny typowo styl.

Często zadawane pytania

Czy lekcja „Wyrażenia new z typem docelowym” jest bezpłatna?

Tak — pełny tekst „Wyrażenia new z typem docelowym” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyrażenia new z typem docelowym”?

Upraszczaj tworzenie obiektów dzięki wnioskowaniu typu docelowego. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wyrażenia new z typem docelowym”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wnioskowanie typu zmiennych lokalnych za pomocą var
  2. Kiedy unikać var
  3. Typ dynamic
  4. Wyrażenia new z typem docelowym
← Powrót do C# Academy