Różnice między szablonami C++ i typami ogólnymi C# (Przewodnik programowania w języku C#)

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 podstawianie typów ogólnych języka C# są wykonywane w czasie wykonywania, a ogólne informacje o typie są zachowywane dla wystąpień obiektów. Aby uzyskać więcej informacji, zobacz Ogólne 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 - obiektów parametru typu, co spowoduje wystąpienie szablonu w momencie utworzenia wystąpienia 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ń.

Zobacz też