Büyük bir uygulama için, bca.net'deki temel veri türlerinden bazılarını genişletiyorum. Bu integer
, string
, short
, vb içerir. Bu yana, yeni veri türü nesneleri MYInteger ve MYString gibi isimler var. Bunlar benim uygulama için kullanıyorum ve çoğunlukla varsayılan türleri ile uyumlu olan tek türler olduğundan, benim varsayılan değeri geçersiz kılmanın bir yolu var, bu yüzden Dim iThing as Integer
aslında biraz özelleştirilmiş tamsayı türünü kullanıyorsunuz?Tamsayı, dizgi, vb. Gibi temel türleri nasıl geçersiz kılabilirim?
cevap
Hayır. Eğer yapabilirseniz, o zaman neden olabilecek kaosun hayal edin. Bu senaryoya göre iki olasılık vardır olacaktır:
bu tip, bunu beklemiyordum bile kodu kullanmak istiyorsunuz aynı işlemde çalışan tüm kodu. Kötü.
Bir konseptiniz, CLR'nin
Integer
konseptinden farklıdır ve aniden iki tür aynı nesne farklıdır. Kötü.
Sen mühürlü türlerine uzatma yöntemleri ekleyebilirsiniz. Ama senin durumunda geçerlidir, ancak bazen insanlar "uzman" sayıl/ilkel türleri için ne miktarda yapmak istiyorsanız bilmiyorum
Module MyExtensions
<Extension()>
Public Function Extended(i as Integer) As Integer
return i + 4
End Function
End Module
4.Extended() ' evaluates to 8
Bunu gerçekten yapmak isteyip istemediğinizden emin değilim. Gelecekte sürdürmeyi daha da zorlaştıracaktır. Neden sadece MyInteger kullanmıyorsunuz? Harici kaynak kodu ithal ediyorsanız, sadece & yerini bulun.
Korkarım ki bunu yapamadım. Çoğunlukla, söz konusu kod çok sayıda insan üzerinde çalışılacak ve zaten normal tam sayıları kullanan bazı kişilerle ve bazılarının özel tipini kullanarak ve daha sonra bir sürü kaosla karşılaştıklarında sorun yaşadık. Bazı işlevler varsayılanı ve bazı özelleri kullanmak için yazılmıştır ve işleri basitleştirmek için uğraşıyordum. – DynamiteReed
: gibi bir şey. Örneğin, this codeplex project içinde tanımlanmış türlerden bazılarına bakın.
public struct Latitude : IFormattable, IComparable<Latitude>, IEquatable<Latitude>
{
private readonly double _DecimalDegrees;
//Some constants
//Some constructors
//Some static fields like...
public static readonly Latitude Equator = new Latitude(0.0);
public static readonly Latitude TropicOfCapricorn = new Latitude(-23.5);
public static readonly Latitude TropicOfCander = new Latitude(23.5);
//Some operators
public static Latitude operator +(Latitude left, Latitude right)
{
return new Latitude(left.DecimalDegrees + right.DecimalDegrees);
}
public static Latitude operator +(Latitude left, double right)
{
return new Latitude(left.DecimalDegrees + right);
}
}
Teknik olarak: türlerinin bazıları Bu tiplerin her biri bunun gibi,/uzun aslında genellikle tek bir veri üyesi, çift kişilik, şamandıra veya int bir yapı vb enlem, boylam, Angle içerir Bu türler sadece sınıf ya da yapılardır (esas olarak bağlantılı proje durumunda yapılar), fakat çoğunlukla (genellikle?, hemen hemen her zaman ??) olan değerleri temsil etmek için kullanılırlar. Eğer bir Angle özelliğine sahip bir nesneniz varsa, çoğu insan büyük olasılıkla bunu iki katına çıkaracaktır.
public MyObject
{
public double AngleInDegrees { set; get; }
}
bir değer AngleInDegrees atandığında, MyObject bazı işlem yapmak isteyebilirsiniz:
public double AngleInDegrees
{
get
{
return _AngleInDegrees;
}
set
{
if (value < 0 || value > 360)
{
_AngleInDegrees = NormalizeAngle(value);
}
else
{
_AngleInDegrees = value;
}
}
}
Ne birçok nesneler üzerinde bir AngleInDegrees özelliği olsaydı? Uygulamanızdaki diğer bileşenlerin ürettiği açıları tüketen bir sınıfınız varsa ne olur? Doğrulamayı kim yapmalıdır? Her zaman "iyi" açılarla çalışmayı hesaba katmak yararlı olur mu?
Bir AngleInDegrees türüne sahip olarak, tüm doğrulama ve özel "Açı" işlemlerini tür içine koymak mümkün hale gelir. Ayrıca AngleInDegrees kullanmak istediğiniz tüm yerleri güçlü bir şekilde yazmak mümkün olur.
Dediğim gibi, bunun başarmaya çalıştığınız şeyin türü olup olmadığını bilmiyorum. Ben sadece, bana bağlandığım projeyi ilk gördüğümde aynı düşünceye sahip olduğumu sorduğumda, bana öyle geliyordu (örn.Aslında, daha kısıtlayıcı ilkel türler yapmak için ilkel veri türlerinin alt sınıflarını oluşturdukları görülmüştür.
- 1. TryParse'i nasıl geçersiz kılabilirim?
- 2. @ Html.LabelFor şablonunu nasıl geçersiz kılabilirim?
- 3. Geçiş gecikmesini nasıl geçersiz kılabilirim?
- 4. Grails'deki varsayılan hata mesajını nasıl geçersiz kılabilirim?
- 5. jwt_response_payload_handler yöntemini nerede geçersiz kılabilirim?
- 6. django Modelinde get yöntemini nasıl geçersiz kılabilirim?
- 7. RDD'yi Dstream'den nasıl kaldırabilir veya geçersiz kılabilirim?
- 8. Django Yönetici: Bir modeli nasıl geçersiz kılabilirim?
- 9. Mysql'de tamsayılar (tamsayı ile tamsayı) & varchar (varchar ile varchar) gibi veri türleri nasıl oluşturulur?
- 10. Java'da bir ArrayList'in toString yöntemini nasıl geçersiz kılabilirim?
- 11. Django'da standart handler404, handler403, handler500'ü nasıl geçersiz kılabilirim?
- 12. Firefox'u varsayılan olarak imleci salt okunur olarak nasıl geçersiz kılabilirim?
- 13. Çekirdek Verileri tamsayıları için kullanılacak tamsayı türleri
- 14. ARel'de CONCAT() vb. Gibi işlevleri nasıl kullanırım?
- 15. Scala'da bir iç sınıf nasıl "geçersiz kılınır"?
- 16. aşağıdaki gibi temel matematik işlemleri ile enum beyan etmek istiyorum enum
- 17. nasıl gibi değer türleri bir örneğini oluşturmak istediğiniz yansıma
- 18. Üyelik esasına göre sınıflandırılmış bir __declspec (dllexport) notu nasıl geçersiz kılabilirim? ELF hedefler üzerinde
- 19. Pelikandaki bir sayfa veya makale tarafından kullanılan varsayılan şablonu nasıl geçersiz kılabilirim?
- 20. Temel tamsayı bölme başarısız -.. Bir şey benim ortamı/sistemin problemi gibi
- 21. Verimli kod: tamsayı veri türleri vs VB.Net içinde
- 22. Tamsayı türleri için std :: takas ne kadar hızlı?
- 23. Nesnenin sayısal dönüştürülmesi için Java kütüphanesi (Tamsayı, Uzun vb ..)
- 24. Özyinelemeli işlev türleri nasıl oluşturulur?
- 25. JSF 2.0: Özel oluşturucularla temel oluşturucuları nasıl geçersiz kılarsınız?
- 26. İç içe yerleştirilmiş öğeler XSD'ye neden olur JAXB'de geçersiz sınıf devralma döngüsü istisnası, bağlamaları düzgün bir şekilde nasıl geçersiz kılabilirim?
- 27. Bir Flask Modülünde PUT ve DELETE için HTTP yöntemlerini nasıl geçersiz kılabilirim?
- 28. Yetkilendirme özniteliğini nasıl geçersiz kılabilirim? Bu yüzden, üzerinde bir kesme noktası bırakabilirim
- 29. Angular js - gibi HTML karakterleri içeren bir dizgi döndürür
- 30. dizgi incelemesi
Yeni ilkel türleri kullanmanız için bir nedeniniz var mı? Neden uzantı yöntemlerini kullanamazsınız? – cdhowie
Sanırım her programlama kuralını kırıyor. Yine de, bunun mümkün olduğunu düşünmüyorum. Genel olarak, uzantı yöntemleri için iyi bir aday gibi geliyor. – Inisheer
Öncelikle FBI'ın tanık koruma programının, işlerini kısa süre önce bırakan programcılara da erişip erişmediğini kontrol edin. –