Aracılığıyla paylaş


C++ Şablonları ve C# Genel Türleri Arasındaki Farklar (C# Programlama Kılavuzu)

C# Genel Türler ve C++ şablonlarının her ikisi de parametreli türler için destek sağlayan dil özellikleridir. Ancak ikisi arasında birçok fark vardır. Söz dizimi düzeyinde C# genel türleri, C++ şablonlarının karmaşıklığı olmadan parametreli türler için daha basit bir yaklaşımdır. Buna ek olarak, C# C++ şablonlarının sağladığı tüm işlevleri sağlamaya çalışmaz. Uygulama düzeyinde birincil fark, C# genel tür değiştirmelerinin çalışma zamanında gerçekleştirilmesi ve genel tür bilgilerinin örneklenen nesneler için korunmasıdır. Daha fazla bilgi için bkz . Çalışma Zamanında Genel Değerler.

C# Genel Türleri ile C++ şablonları arasındaki temel farklar şunlardır:

  • C# genel türleri C++ şablonlarıyla aynı miktarda esneklik sağlamaz. Örneğin, kullanıcı tanımlı işleçleri çağırmak mümkün olsa da C# genel sınıfında aritmetik işleçleri çağırmak mümkün değildir.

  • C# gibi template C<int i> {}tür olmayan şablon parametrelerine izin vermez.

  • C# açık özelleştirmeyi desteklemez; diğer bir ifadeyle, belirli bir tür için özel bir şablon uygulamasıdır.

  • C# kısmi özelleştirmeyi desteklemez: tür bağımsız değişkenlerinin bir alt kümesi için özel bir uygulama.

  • C# tür parametresinin genel tür için temel sınıf olarak kullanılmasına izin vermez.

  • C# tür parametrelerinin varsayılan türlere sahip olmasını sağlamaz.

  • C# dilinde, genel tür parametresinin kendisi genel olamaz, ancak yapılı türler genel türler olarak kullanılabilir. C++ şablon parametrelerine izin verir.

  • C++, şablondaki tüm tür parametreleri için geçerli olmayabilecek koda izin verir ve daha sonra tür parametresi olarak kullanılan belirli tür için denetlenür. C# bir sınıftaki kodun, kısıtlamaları karşılayan herhangi bir türle çalışacak şekilde yazılması gerekir. Örneğin, C++ dilinde aritmetik işleçleri + kullanan bir işlev yazmak ve - tür parametresinin nesnelerine yazmak mümkündür. Bu işlev, şablonun örneği oluşturulurken bu işleçleri desteklemeyen bir türle hata oluşturur. C# buna izin vermemektedir; izin verilen tek dil yapıları, kısıtlamalardan çıkarılabilenlerdir.

Ayrıca bkz.