W generics C # możemy zadeklarować ograniczenie parametru typu T
do domyślnego konstruktora, mówiąc where T : new()
. Jednak żadne inne ograniczenia tego rodzaju nie są ważne - new(string)
na przykład itp.
Z jakich powodów projekt i / lub implementacja języka jest tego przyczyną?
Czy jest coś w sposobie działania konstruktorów lub w sposobie implementacji systemu typów, który zabrania tego (a przynajmniej utrudnia)? Jeśli tak, co to jest? Pamiętam czytanie gdzieś, że default(T)
faktycznie kompiluje się new T()
do T : struct
. Może to ma związek z tym?
Czy jest to po prostu decyzja projektowa podjęta w celu uniknięcia nadmiernego skomplikowania języka?
new(string)
nie jest domyślnym ograniczeniem konstruktora. Twoje pytanie jest równoznaczne ze stwierdzeniem „Dlaczego nie istnieją ograniczenia wymagające konkretnych podpisów konstruktorów?” Bardzo prawdopodobne, ponieważ takie ograniczenie nie byłoby szczególnie przydatne.