Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typy ogólne języka C# i szablony języka C++ to funkcje języka, które zapewniają obsługę typów sparametryzowanych. Istnieje jednak wiele różnic między nimi. Na poziomie składni typy ogólne języka C# to prostsze podejście do sparametryzowanych typów bez złożoności szablonów języka C++. Ponadto język C# nie próbuje udostępnić wszystkich funkcji zapewnianych przez szablony języka C++. Na poziomie implementacji podstawową różnicą jest to, że podstawienia typów ogólnych w C# odbywają się w czasie wykonywania programu, a informacje o typach ogólnych są zachowywane dla zainstalowanych obiektów. Aby uzyskać więcej informacji, zobacz Typy generyczne w środowisku uruchomieniowym.
Poniżej przedstawiono kluczowe różnice między szablonami ogólnymi języka C# i C++:
Typy ogólne języka C# nie zapewniają takiej samej elastyczności jak szablony języka C++. Na przykład nie można wywołać operatorów arytmetycznych w klasie ogólnej języka C#, chociaż można wywołać operatory zdefiniowane przez użytkownika.
Język C# nie zezwala na parametry szablonu innego typu, takie jak
template C<int i> {}.Język C# nie obsługuje jawnej specjalizacji; oznacza to niestandardową implementację szablonu dla określonego typu.
Język C# nie obsługuje częściowej specjalizacji: implementacja niestandardowa dla podzestawu argumentów typu.
Język C# nie zezwala na użycie parametru typu jako klasy bazowej dla typu ogólnego.
Język C# nie zezwala na używanie domyślnych typów parametrów typu.
W języku C# ogólny parametr typu nie może być ogólny, chociaż konstruowane typy mogą być używane jako typy ogólne. Język C++ zezwala na parametry szablonu.
Język C++ umożliwia kod, który może być nieprawidłowy dla wszystkich parametrów typu w szablonie, który następnie jest sprawdzany pod kątem określonego typu używanego jako parametru typu. Język C# wymaga zapisania kodu w klasie w taki sposób, aby działał z dowolnym typem spełniającym ograniczenia. Na przykład w języku C++ można napisać funkcję, która używa operatorów arytmetycznych
+i-na obiektach typu jako parametr, co spowoduje błąd podczas instancjonowania szablonu z typem, który nie obsługuje tych operatorów. Język C# nie zezwala na to; jedynymi dozwolonymi konstrukcjami językowymi są te, które mogą zostać wywoływalne z ograniczeń.