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
- Wnioskowanie typu zmiennych lokalnych za pomocą var
- Kiedy unikać var
- Typ dynamic
- Wyrażenia new z typem docelowym