2016-09-29 17 views
6

Microsoft Bond (the C# library in particular) kullanarak, bir Bond yapı tanımlanır zaman, bu gibi görünüyor bakın:Microsoft Bond'ta üye numaraları ne demektir?

struct Name 
{ 
    0: type name; 
    5: type name; 
    ... 
} 

bu rakamlar (0, 5, ...) ne anlama geliyor?

Kalıtımda özel tedaviye ihtiyaçları var mı? (Atalarımda tanımlanmış aynı sayıya sahip üyeleri geçersiz kılmadığından emin olmam gerekir mi?)

+0

sen bağlantılı dokümantasyon, sıra değeri işaretsiz olmalıdır 'diyor 16- bit tam sayı, bir tür içindeki her alan için benzersizdir. – TZHX

cevap

3

Alan ordinalleri her alanın benzersiz kimliğidir. Etiketlenmiş ikili protokollere serileştirilirken, bu sayılar hangi alanın yükte olduğunu belirtmek için kullanılır. Alanların isimleri kullanılmaz. (.bond dosyasındaki bir alanın yeniden adlandırılması, serileştirilmiş ikili veri uyumluluğunu kesmez [ancak metin protokolleri hakkında aşağıdaki uyarıya bakın].) Sayılar, dizgeden daha küçüktür, bu da yük boyutu boyutunu azaltmaya yardımcı olur, ancak aynı zamanda serileştirmeyi iyileştirir. serileştirme zamanı.

Aynı yapıdaki aynı alanı tekrar kullanamazsınız.

Yapıdan miras aldığınızda (veya yapınızın içinde bir yapısal alan varsa) özel bir işlem gerekmez. Bond, yapıları sıralayanları ayrı tutar. Somut olarak, aşağıdaki yasal ve çalışacaktır:

namespace inherit_use_same_ordinal; 

struct Base { 
    0: string field; 
} 

struct Derived : Base { 
    0: bool field; 
} 

Basit JSON ve Basit XML gibi metin seri hale protokolleri hakkında bir uyarı: alanına tanımlayıcı olarak alan adını kullanmak bu protokollerin. Dolayısıyla, bu protokollerde bir alanı yeniden adlandırmak, seri hale getirilmiş veri uyumluluğunu koparır.

Ayrıca, Basit JSON ve Basit XML, devralma hiyerarşisini düzleştirir; dolayısıyla, Base ve Türetilmiş isimleri yeniden kullanmak çatışmalara neden olur. Her ikisinin de bunun etrafında çalışmanın yolları var. Basit XML için, SimpleXml.Settings.UseNamespaces parameter can be set to true tam nitelikli adlar yayacak.

Basit JSON için

, Bond attribute JsonName çakışmasını önlemek için basit JSON serileştirme için kullanılan adını değiştirmek için kullanılabilir:

struct Derived : Base { 
    [JsonName("derived_field")] 
    0: bool field; 
}