Bunu birkaç farklı yoldan deniyorum, ancak yapamayacağı sonucuna ulaşıyorum. Geçmişte diğer dillerden zevk aldığım bir dil özelliği. Sadece yazmam gereken bir şey mi?Statik dizinleyiciler C# ile desteklenmiyor mu?
cevap
Hayır, statik dizinleyiciler C# ile desteklenmiyor. Ancak diğer cevaplardan farklı olarak, ben bunları sahiplenmenin nasıl kolay olabileceğini görüyorum. Düşünün:
Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Nispeten ender kullanılacak, sanıyorum, ama buna yasaklı garip olduğunu düşünüyorum - bu kadarıyla gördüğünüz gibi özel bir nedeni yok asimetri verir.
Statik endeksli özellikleri kullanılarak statik dizinleyicileri benzetilebilir:
public class MyEncoding
{
public sealed class EncodingIndexer
{
public Encoding this[string name]
{
get { return Encoding.GetEncoding(name); }
}
public Encoding this[int codepage]
{
get { return Encoding.GetEncoding(codepage); }
}
}
private static EncodingIndexer StaticIndexer;
public static EncodingIndexer Items
{
get { return StaticIndexer ?? (StaticIndexer = new EncodingIndexer()); }
}
}
Kullanımı:
Encoding x = MyEncoding.Items[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = MyEncoding.Items["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Jon'un cevabı (her zamanki gibi) en doğru olsa da, bu bazı durumlar için bu kadar kötü bir alternatif değildir. – Thiru
Hayır, ama kullanan bir sınıfın bir örneğini tutan statik bir alan oluşturmak mümkündür bir dizinleyici ...
namespace MyExample {
public class Memory {
public static readonly MemoryRegister Register = new MemoryRegister();
public class MemoryRegister {
private int[] _values = new int[100];
public int this[int index] {
get { return _values[index]; }
set { _values[index] = value; }
}
}
}
}
... Hangi yoldan ulaştığınız gibi erişilebilir g. Bu, aşağıdaki pencerede test edilebilir ...
Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144
- 1. Tetikleyiciler Windows 8 XAML'de desteklenmiyor mu?
- 2. array.map işlevi IE8 standartlarında desteklenmiyor mu?
- 3. @Model VB için Razor Görünümlerinde desteklenmiyor mu?
- 4. Spring Boot 405 POST yöntemi desteklenmiyor mu?
- 5. C++ ile statik başlatılması Objective-C ile karıştırılmış
- 6. Doxygen statik sınıfları belgelemiyor mu?
- 7. C Statik Sabitler C#
- 8. Android multidex proguard ile desteklenmiyor
- 9. Neden statik sınıf değişkenlerini C++ ile başlatmalıyım?
- 10. DocumentBB Partitione d Koleksiyonu Power BI'da Desteklenmiyor mu?
- 11. pop Talimat, NASM kullanarak 64-bit modda desteklenmiyor mu?
- 12. C++ sınıfı statik işaretçi
- 13. C++ statik değişkeni
- 14. C# Statik Yöntemler
- 15. Kültür desteklenmiyor
- 16. HTML'deki img etiketinin alt niteliği, Windows Safari'de desteklenmiyor mu?
- 17. C++ uygulamasıyla C# statik kütüphanesi nasıl derlenir?
- 18. C# Instance Constructor - Statik Oluşturucu
- 19. Pas fonksiyonunun statik ömrü yok mu?
- 20. Java I18n desteklenmiyor Yerel Ayarlar
- 21. C# Statik değişkeni DeploymentItem parametresi olarak kullanarak
- 22. C/C++ Statik const yerel değişkeni
- 23. C# için statik içe aktarma C#
- 24. C# içinde statik olarak bağlama C#
- 25. Mac'te Gitx Sierra: Objective-C çöp toplama artık desteklenmiyor
- 26. Statik constexpr kullandı mı, kullanılmıyor mu?
- 27. DateTime.Parse sorunu, System.Globalization.GregorianCalendar'da desteklenmiyor.
- 28. Linux C için Statik Kod Analyzer ++
- 29. OpenGL GLX uzantısı desteklenmiyor
- 30. C, atlama başlangıç statik dizisi
Tam olarak. Onların yeri var. Burada tasarım konuları hakkında konuşan diğer kişiler, çok yararlı olduklarından, açıkça izin verilen klasik bir dil ile hiç çalışmamışlardır. – user9991
Yep. Tam olarak benim nokta. Mimaride çok kullanışlı bir yer var. Bazı insanların körleri var, sanırım! – Kilhoffer
Crap. Şimdi önbellek [anahtar] yerine statik bir yöntem Cache.Get (anahtar) yazmalıyım ... – Gishu