Özel Ekleme ve Kaldırma Butonu
Özel Ekleme ve Kaldırma Butonu
Derleyici, bildirilen her olay için özel bir temsilci alanı oluşturduğundan, çok sayıda olay bildiren bir sınıf, olay başına bir alan kullanır. System.Windows.Forms içindeki Control sınıfı 25’ten fazla olay bildirir, ancak genellikle belirli bir kontrol için bu olaylardan yalnızca birkaçı bağlanır. İhtiyaç duyulan şey, gerekmediği sürece temsilci için depolama alanı ayırmaktan kaçınmanın bir yoludur.
C# dili, add() ve remove() yöntemlerinin doğrudan yazılmasına izin vererek bunu destekler, bu da delegelerin alan açısından daha verimli bir şekilde depolanmasına olanak tanır. Bunu yapmanın tipik bir yolu, Hashtable’ı nesnenin bir parçası olarak tanımlamak ve ardından temsilciyi Hashtable’da bunun gibi depolamaktır.
add() ve remove() yöntemleri, özellikler için kullanılana benzer bir sözdizimi kullanılarak yazılır ve temsilciyi depolamak için delegeStore hash tablosunu kullanır. Karma tablo kullanmanın bir sorunu, delegeleri depolamak ve getirmek için kullanılabilecek bir anahtar bulmaktır.
Benzersiz bir anahtar olarak hizmet edebilecek bir olayla ilişkili hiçbir şey yoktur, bu nedenle clickEventKey, yalnızca onu karma tablo için bir anahtar olarak kullanabilmeniz için dahil edilen bir nesnedir. Statiktir çünkü aynı benzersiz değer, Button sınıfının tüm örnekleri için kullanılabilir.
MethodImpl özniteliği gereklidir, bu nedenle iki iş parçacığı aynı anda temsilci eklemeye veya kaldırmaya çalışmaz (ki bu kötü olur). Bunu lock ifadesi ile de yapabilirsiniz.
Bu uygulama, hash tablosu için nesne başına bir alanın kullanılmasına neden olur. Bundan kurtulmak için birkaç seçeneğiniz var. İlki hash tablosunu statik hale getirerek Button sınıfının tüm örnekleri arasında paylaşılabilmesini sağlamaktır. İkinci seçenek, tüm kontroller arasında paylaşılacak tek bir genel sınıf oluşturmaktır, bu da en fazla yerden tasarruf sağlar.
Her ikisi de iyi seçimlerdir, ancak her ikisi de yaklaşımda birkaç değişiklik gerektirecektir. İlk olarak, hash tablosu nesnenin tüm örnekleri arasında paylaşıldığından, bir nesneyi anahtar olarak kullanmak yeterince iyi değildir, bu nedenle örneğin bir anahtar olarak kullanılması gerekecektir.
Örneği kullanmanın ince bir sonucu, denetimlerin kapalı olduklarında olay depolarını kaldırmak için bir yöntem çağırmak zorunda olmalarıdır. Bu olmasaydı, kontrol artık görünür olmayacaktı, ancak yine de global olay nesnesi aracılığıyla kontrole başvurulacaktı ve bellek hiçbir zaman çöp toplayıcı tarafından geri alınamayacaktı.
DelegateCache sınıfı, bir ana karma tabloda bir temsilci depolayan her örnek için karma tabloları depolar. Bu, bir kontrol bittiğinde daha kolay temizleme sağlar. Combine(), Remove() ve Fetch() yöntemleri bekleneni yapar. ClearDelegates() yöntemi, belirli bir kontrol örneği için saklanan tüm temsilcileri kaldırmak için Button.TearDown() tarafından çağrılır.
Kullanıcı Tanımlı Dönüşümler
C#, dönüşümlerin sınıflar veya yapılar ve sistemdeki diğer nesneler arasında tanımlanmasına izin verir. Kullanıcı tanımlı dönüştürmeler her zaman, içinde tanımlandıkları nesneyi bir parametre olarak alması veya bir dönüş değeri olarak döndürmesi gereken statik işlevlerdir. Bu, dönüştürmelerin mevcut iki tür arasında bildirilemeyeceği anlamına gelir, bu da dili daha basit hale getirir.
Aşağıdaki örnek, roma rakamlarını işleyen bir yapı uygular. Bunu bir sınıf olarak da yazabilirsiniz, ancak bir veri parçası olduğu için bir yapı daha anlamlıdır.
Bu yapı, kısa bir değer alabilen bir oluşturucu bildirir ve aynı zamanda bir tamsayıdan bir RomanNumeral’a dönüştürme bildirir. Sayı yapı tarafından desteklenen büyüklükten büyükse bir istisna atabileceğinden, dönüştürme açık bir dönüştürme olarak bildirilir.
Bir RomanNumeral içindeki değer her zaman bir kısaltmaya sığacağından, örtük olarak beyan edilen kısa bir dönüşüm göreceksiniz. Ve son olarak, sayının romanize edilmiş halini veren dizgeye dönüştürmeyi göreceksiniz.
Bu yapının bir örneğini oluşturduğunuzda, değeri ayarlamak için yapıcıyı kullanabilirsiniz. Tamsayı değerini bir RomanNumeral değerine dönüştürmek için açık bir dönüştürme kullanabilirsiniz.
Bunu yaparsanız, derleyici belirsiz bir dönüştürme olduğunu bildirir. Sınıf, hem kısa hem de dizeye örtük dönüştürmeler içerir ve Console.WriteLine() her iki sürümü de alan aşırı yüklere sahiptir, bu nedenle derleyici hangisini arayacağını bilemez.
Örnek, belirsizliği gidermek için açık bir döküm kullanıyor, ancak bu biraz çirkin. Bu yapı büyük olasılıkla romanlaştırılmış gösterimi yazdırmak için kullanılacağından, tamsayıya dönüştürmeyi açık bir yapı olarak değiştirmek mantıklıdır, böylece dizgeye dönüştürme tek örtük olandır.
Hızlı Erişim Çubuğu nerede
Word araç çubukları ve görevleri
Hızlı Erişim Araç Çubuğu kaldırma
Araç Çubuğu ekleme
Menü araç çubuğu
Word şeridi özelleştirme
Word eklenti kaldırma
Microsoft Word şerit sekmeleri nelerdir
Dönüşüm Öncesi ve Sonrası
Önceki örnekte, RomanNumeral’a ve RomanNumeral’dan dönüştürülen temel türler, yapının kendisinde bildirilen türlerle tam eşleşmelerdi. Kaynak veya hedef türleri, dönüştürme işlevlerindeki türlerle tam olarak eşleşmediğinde, kullanıcı tanımlı dönüştürmeleri de kullanabilirsiniz.
Kaynak veya hedef türleri tam olarak eşleşmiyorsa, kaynak türünden kullanıcı tanımlı dönüştürmenin kaynak türüne ve/veya kullanıcı tanımlı dönüştürmenin hedef türü ve dönüştürmenin türü (örtük veya açık) da uyumlu olmalıdır.
Belki bir örnek anlaşılması biraz daha kolay olacaktır. Aşağıdaki satır, örtük kullanıcı tanımlı dönüştürmeyi doğrudan çağırır. Burada, RomanNumeral’dan kısaya örtük dönüştürme gerçekleştirilir, ardından kısadan uzuna örtük dönüştürme yapılır.
Kullanım açık olduğundan, int’den RomanNumeral’a açık dönüştürme kullanılır. Ayrıca, kullanıcı tanımlı dönüştürme çağrılmadan önce açık bir dönüştürme gerçekleşebilir.
İlk dönüştürmede, uzun değer açık dönüştürmeyle bir tamsayıya dönüştürülür ve ardından kullanıcı tanımlı dönüştürme çağrılır. İkinci dönüştürme, açık kullanıcı tanımlı dönüştürmeden önce örtülü bir dönüştürmenin gerçekleştirilmesi dışında benzerdir.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)