Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 24117|Yanıt: 1

[Kaynak] C# Tuple VS ValueTuple'ın ayrıntılı açıklaması

[Bağlantıyı kopyala]
Yayınlandı 14.05.2018 16:37:48 | | | |
C# 7.0 bir süredir piyasada ve herkes yeni özellik olan ValueTuple'da tuples için bir optimizasyon olduğunu biliyor. İşte Tuple ile ValueTuple'ı 10 dakikada açıklamak için detaylı örnekler, böylece ValueTuple'ın faydalarını ve kullanımını daha iyi anlamak için.

Tuple hakkında yeterince bilginiz varsa, "Tuple'ı İnceleme Bölümü"nü atlayıp doğrudan "ValueTuple Açıklandı" bölümüne gidip değer tuple'larının göz kamaştırıcı kullanımını görebilirsiniz.



Tuple'a geri bak

Tuple, C# 4.0 ile çıkan ve .Net Framework 4.0 ve üzeri sürümlerde sunulan yeni bir özelliktir.

Tuple, belirli bir sayı ve eleman dizisine sahip bir veri yapısıdır. Örneğin, öğrenci bilgilerini depolamak için üçlü bir veri yapısı tasarlayın; bu toplam üç unsur içerir: ilki isim, ikincisi yaş, üçüncüsü ise boy.

Tuple'ların özel kullanım alanları şunlardır:

1. Tuple nasıl oluşturulur?

Varsayılan durum. Net ÇerçevesiTuplelar sadece 1 ila 7 tuple elemanını destekler8 veya daha fazla element varsa, bunu uygulamak için Tuple'ın iç içe geçirme ve Rest özelliklerini kullanmanız gerekir. Ayrıca, Tuple sınıfı tuple nesneleri oluşturmak için statik bir yöntem sağlar.

Yapıcılar kullanarak tuple oluşturun:

Tuple statik yöntemiyle tuple oluşturun, sekiz elemana kadar destek olabilirsiniz:
Not: Burada oluşturulan Tuple tipi aslında Tuple<int, int, int, int, Tuple<int>>dir, yani testTuple8.Rest tarafından elde edilen veri türü <int>Tuple'dır, bu yüzden tam değeri almak için Item1 özelliğini almanız gerekir.

2. Bir veri kümesini temsil eder
Aşağıda bir öğrenci hakkında üç bilgiyi temsil eden bir tuple oluşturun: isim, yaş ve boy, ayrıca ayrı bir sınıf oluşturmadan.

3. Bir yöntemden birden fazla değer döndürün
Bir fonksiyonun birden fazla değer döndürmesi gerektiğinde, genellikle out parametresi kullanılabilir ve out yerine birden fazla değer döndürmek için tuple kullanılabilir.
4. Tek parametreli yöntemler için çok değerli aktarım

Fonksiyon parametresi yalnızca bir Nesne tipi olduğunda, tuple uygulaması kullanılarak birden fazla parametre değeri aktarılabilir.

Yukarıda belirtilen kullanışlı yöntemlere rağmen, tuple'ların önemli eksiklikleri de vardır:

  • Öğelere erişirken, onlara yalnızca ItemX üzerinden erişebilirsiniz ve kullanmadan önce öğelerin sırasını netleştirmeniz gerekir, ayrıca özellik isimlerinin pratik anlamı yoktur, bu da hatırlanması zahmetlidir.
  • Sekiz elemente kadar var ve daha fazlasını isterseniz, sadece son elementle iç içe geçirerek genişletebilirsiniz;
  • Tuple, diğer basit tipler gibi bir değer türü değil, referans tipidir; yığında alan tahsis eder ve CPU yoğun olduğunda çok fazla oluşturma ve tahsis işi olabilir.


Bu nedenle, C# 7.0'da yeni bir ValueTuple tipi tanıtıldı ve bu aşağıdaki bölümlerde detaylandırılmıştır.

ValueTuple detaylı açıklama yapıyor

ValueTuple, C# 7.0'ın yeni özelliklerinden biri olup, .Net Framework 4.7 ve üzeri için mevcut.

ValueTuple 4.7 gerektirmez, nuget sorun değilse, 4.7 dahili ise.
Ayrıca, ValueTuple bir yapı türüdür, Microsoft 64 bayttan uzun yapılar kullanılmamasını önerir; bu da ValueTuple için de geçerlidir.


Değer tuple aynı zamanda belirli bir sayı ve eleman dizisini temsil etmek için kullanılan bir veri yapısıdır, ancak tuple sınıfından farklıdır ve aşağıdaki ana farklara sahiptir:

Değer tuple, bir yapı, bir değer tipidir, bir sınıf değil; tuple ise bir sınıf, bir referans tipidir;
Değer tuple elemanları değişkendir, sadece okunabilir değildir; yani, değer tuple'daki elemanın değerini değiştirebilirler;
Veri üyelerinin değer tuple'ı bir öznitelik değil, bir alandır.
Değer tuple'larının özel kullanımı aşağıdaki gibidir:

1. Bir değer tuple nasıl oluşturulur?
Tuple sınıfları gibi, .Net Framework değer tuple'ları sadece 1 ila 7 tuple öğesini destekler ve eğer 8 veya daha fazla eleman varsa, bunu uygulamak için değer tuple'ın iç içe ve Rest özelliklerini kullanmanız gerekir. Ayrıca, ValueTuple sınıfı, değer tuple nesneleri oluşturmak için statik yöntemler sağlayabilir.

Yapıcılar kullanarak tuple oluşturun:

Tuple statik yöntemiyle tuple oluşturun, sekiz elemana kadar destek olabilirsiniz:
Burada oluşturulan Tuple tipi aslında Tuple<int, int, <int>> olduğundan, testTuple8.Rest tarafından elde edilen veri tipi <int>Tuple'dır, bu yüzden doğru değeri almak için Item1 özelliğini almanız gerekir.

Optimizasyon Farkı:7'den fazla elemanlı bir değer tuple oluşturulduğunda, iç içe tuple içindeki değerler aşağıdaki ItemX kullanılarak erişilebilir ve yukarıdaki örnekte onuncu elemana testTuple10.Rest.Item3 veya testTuple10.Item10 üzerinden erişilebilir.
2. Bir veri kümesini temsil eder
Bir öğrenci hakkında üç bilgiyi temsil edecek bir değer kümesi oluşturun: isim, yaş ve boy, ayrı ayrı ayrı bir sınıf oluşturmadan.
3. Bir yöntemden birden fazla değer döndürün
Değer tuple'ları ayrıca fonksiyon tanımında out parametresi yerine birden fazla değer döndürebilir.
Optimizasyon Farkı:ReturnTuple'da döndürme değeri, açıklanamaz bir şekilde, bunun yerine yeni bir sözdizimi (,,) kullanılarak belirtilebilir, örneğin (string, int, uint):
studentInfo türünü hata ayıklamak ValueType üçlüdür.

Optimizasyon Farkı:Dönüş değeri, bellek ataması ve erişimi anlamayı kolaylaştırmak için eleman adını belirtebilir:

Pratik hafıza ataması:



4. Tek parametreli yöntemler için çok değerli aktarım
Bir fonksiyon parametresi yalnızca bir Nesne tipi olduğunda, değer tuple uygulaması kullanılarak birden fazla değer aktarılabilir.
5. ValueTuple'u Parçalayın
Var (x, y) veya (var x, var y) ile tuple elemanlarını çözerek yerel değişkenler oluşturabilirsiniz, istenmeyen öğeleri görmezden gelmek için "_" sembolünü kullanabilirsiniz.
Yukarıda belirtildiği gibi, ValueTuple C#'ı daha basit ve kullanımı kolaylaştırıyor. Tuple'a karşı başlıca avantajlar şunlardır:

  • ValueTuple, fonksiyon dönüş değerleri için yeni bir sözdizimi destekler ve "(,,)" kodu daha basit hale getirir;
  • Burada belirtmek gerekir ki, adlandırılmış olsa da, aslında değer tuple böyle bir ismin niteliğini veya alanını tanımlamaz, gerçek adı hâlâ ItemX'tir ve tüm eleman isimleri yalnızca tasarım ve derleme sırasında kullanılır, çalışma zamanında kullanılmaz; bu nedenle bu tür serileştirme ve serilikten çıkarma işlemlerine dikkat edin);
  • Bazı veya tüm element tuple türleri yok etme yöntemleriyle daha kolay kullanılabilir;
  • Değer tuple'ları, referans tipli tuple'lardan daha verimli olan değer tipleridir ve değer tuple'larının eşit olup olmadıklarını karşılaştırmak için kullanılabilecek bir karşılaştırma yöntemi vardır, bkz. Detaylar:https://msdn.microsoft.com/en-us/library/system.valuetuple






Önceki:Büyük ölçekli mimariler için bilimin popülerleşme araçları
Önümüzdeki:HUAWEI CLOUD, Blockchain Teknolojisi Endüstrisinin Uygulanmasını Hızlandırmak İçin Blockchain Beyaz Kitabı'nı Yayınladı
Yayınlandı 15.05.2018 11:41:00 |
Kabul Ediyorum!
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com