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

Görünüm: 31087|Yanıt: 0

[Kaynak] C# Anonim Tip Öğrenme Günlüğü

[Bağlantıyı kopyala]
Yayınlandı 16.10.2020 17:41:04 | | | |
Karmaşık yöntemler, olaylar ve yapıcılar gibi karmaşık sınıfları tanımlamak istemediğimizde, dinamik olarak özel bir veri tipi -> anonim tip üretebiliriz.

1. Anonimlik türünü tanımlayın

Anonim bir tür tanımlarken, var anahtar kelimesini ve nesne başlatma sözdizimi kullanmanız gerekir.

var: Derleyici, derleme zamanında otomatik olarak yeni bir sınıf tanımı üretir (C# kodunda sınıfın adını göremeyiz).

Başlatma: Derleyiciye, yeni oluşturulan tür için özel arka plan alanları ve (yalnızca okunabilir) özellikler oluşturmasını söyler.

Parametreleri geçirerek anonim bir tür oluşturun ve ilgili bilgileri yazdırın



Çağrı: Anonim tipler ayrıca sabit kod kullanılarak da oluşturulabilir



2. Anonim tiplerin iç temsili

Tüm anonim tipler otomatik olarak Object'ten miras alır, bu yüzden car nesnesinde ToString, GetHashCode, Equals kullanabiliriz, şunu deneriz:



Çağrılar ve sonuçlar:







Araba nesnesinin türü: <>f__AnonymousType03 (sizinki farklı olabilir), anonim tip adı derleyici tarafından hissedilir, müdahale edemeyiz, CIL kodu.

3. ToString() ve GetHashCode() yöntemlerinin uygulanması.

1.ToString()



2.GetHashCode()

Her anonim tipin değişkenini kullanarak System.Collections.Generic.EqualityComparer türü girişi olarak hash değerini hesaplar ve yalnızca <T>iki anonim tip aynı özelliklere sahip ve aynı değer verildiğinde aynı hash değerini üretir.

4. Anonim tiplerin eşit anlamanlamı

Eşit()





Sonuçları analiz edin:

1. Equals(): Derleyici, değer anlamına göre nesnelerin eşit olduğunu belirlemek için Equals()'yı geçersiz eder (örneğin, iki nesnenin her veri üyesinin değerini not eder)

2. == Operatörler: Anonim tipler eşdeğer operatörleri (== , !=) aşırı yüklemediği için, == içerik değil, referansları karşılaştırır.

3. GetType(): Çünkü aynı montajda iki aynı (aynı niteliklere sahip) anonim tip ilan edersek, derleyici yalnızca bir anonim tipin tanımını üretir.

5. Anonim tipler içeren anonim tipler



Özet:

Aslında, özellikle LINQ kullanırken anonim tipleri kullanmaya dikkat etmeli ve anonim tiplerin ortaya çıkması nedeniyle güçlü tipli sınıflar veya yapılar kullanmaktan asla vazgeçmemeliyiz.

Aslında, anonim tipin kendisinin birçok sınırlaması vardır:

  • Anonim tipin adını kontrol edemezsiniz
  • Anonim tipler System.Object'i devralır
  • Anonim türde alan ve öznitelikler her zaman sadece okunur (only read) geçerlidir
  • Anonim türler olayları, özel yöntemleri, özel operatörleri ve özel yeniden yazmaları desteklemez
  • Anonim tipler örtük mühürlenir
  • Anonim tiplerin varlık oluşturulması yalnızca varsayılan yapıcı kullanır


Bir varlığın şeklini işlevini tanımlamadan hızlıca tanımlamamız gerekiyorsa, anonim tipi kullanabiliriz.




Önceki:SQL Server verileri insert script olarak dışa aktarılır
Önümüzdeki:.net/C#, anonim olmayan fonksiyonları &lt;&gt;f__AnonymousType0 yöntemleri yansıtır
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