şey (=,> =, < = vb) tanımlanmış Select Case
için adil bir oyun. Doğru (veya yanlış) referanslar, VB'de =
ile karşılaştırılamaz; biri Is
kullanmalıdır. (Veya Object.Equals(objA As Object, objB As Object)
- ama, gerçekten, neden? Is
var mı?)
Ancak Object equality behaves different in .NET'a bir göz atın - belki de VB yolu daha az kafa karıştırıcı mı? Her neyse, sanırım Select Case
'dan beri If-ElseIf merdiveni ile sıkışmışsın Is
yapmıyor. (Iyi, öyle, ama bu daha HyperCard ait it
gibi farklı bir Is
bu.) Ben merdiveni takip etmek akıllı ve kolay görünüyor düşünüyorum:
sen işaret gibi
If sender Is StyleBoldButton Then
ElseIf sender Is StyleUnderButton Then
ElseIf sender Is StyleItalicButton Then
Else
End If
, Select Case True
desen bir " OrElse "VB6'da kısa devre çözümü - gerçek bir ihtiyacı karşılamada başarılı bir yol. Ancak bu VB.NET'de gerekli değildir. Bu ruhla, belki de, tasarım modellerini nesne yönelimli bir dilden beklenen en iyi uygulamalarla daha iyi kullanmak daha iyidir. Örneğin, Denis Troller'in önerdiği gibi, neden her düğmeyi kendi olay işleyicisine vermiyorsunuz? Bir Is-muktedir Select gibi bir şey ısrar ederseniz
Ama burada ben muhtemelen kendimi kullanmaz şey: İşte karşılaştıklarında C# ==
gibi işe .Equals
güveniyorum
With sender
If .Equals(StyleBoldButton) Then
ElseIf .Equals(StyleUnderButton) Then
ElseIf .Equals(StyleItalicButton) Then
Else
End If
End With
Karşılaştırılacak iki tür (http://visualstudiomagazine.com/articles/2011/02/01/equality-in-net.aspx). Bunun güzelliği, sender
'un yalnızca bir kez belirtilmiş olmasıdır; Ancak tüm bu "Case" için yazmanız gereken tüm bu ElseIf .Equals(...) Then
var.
başka yolu da kendimi GetHashCode()
kullanıyor kullanmaz:
Select Case sender.GetHashCode()
Case StyleBoldButton.GetHashCode()
Case StyleUnderButton.GetHashCode()
Case StyleItalicButton.GetHashCode()
Case Else
End Select
Burada (çok) küçük ben benzersiz (yeterli) bu kontrolleri tanımlamak için GetHashCode()
bildiklerini güveniyorum. (Bkz. Default implementation for Object.GetHashCode()).
Polimorfizm kullanmanın daha iyi bir yolu vardır. Nihayetinde "gönderen" ile yaptığınız şey nedir? Belki de bu işlevsellik, her bir buton üzerinde çalışacak tek bir operasyonda soyutlanabilir mi? O zaman "Seç" e ihtiyacınız olmazdı, ancak bu türden bağımsız olarak bu işlemi yapar mıydınız? – David
'Gönderen StilBoldButton ElseIf ise ... End If'? Belki de daha güzel, belki de daha anlaşılabilir bir durumdur, çünkü 'Select Case True' hilesi, VB.NET –
@David Mmmhh'de çok yaygın olarak kullanılan AFAIK değildir. Her bir düğme için farklı bir değişken belirlemeliyim. Ancak, BOLD ve ITALIC, boolean'ken, UNDERLINE ise envantere alınabilir bir türdür. – Teejay