Bir sözlüğün anahtar arama işlevi için bir arayüz tanımlanabilir. Muhtemelen şöyle tanımlardım:
Interface IKeyLookup(Of Out TValue)
Function Contains(Key As Object)
Function GetValueIfExists(Key As Object) As TValue
Function GetValueIfExists(Key As Object, ByRef Succeeded As Boolean) As TValue
End Interface
Interface IKeyLookup(Of In TKey, Out TValue)
Inherits IKeyLookup(Of Out TValue)
Function Contains(Key As TKey)
Function GetValue(Key As TKey) As TValue
Function GetValueIfExists(Key As TKey) As TValue
Function GetValueIfExists(Key As TKey, ByRef Succeeded As Boolean) As TValue
End Interface
Genel olmayan anahtarlara sahip sürüm, rastgele anahtar varyansına izin vermek için yapısal olmayan anahtar türlerini kullanan kodu kullanan koda izin verir; bu, genel bir tür parametresiyle mümkün değildir. İkincisi izin vereceği için Dictionary(Of Cat, String)
, bir değişkeni değişken olarak kullanmasına izin verilmemelidir . Ancak bir değişkeni değişmez olarak kullanmakta yanlış bir şey yoktur , çünkü mükemmel bir şekilde iyi biçimlendirilmiş bir ifade olarak düşünülmelidir ( sözlüğe, türde olmayan herhangi bir şey için arama yapmaya gerek kalmadan dönmelidir ).Dictionary(Of Animal, String)
SomeDictionaryOfCat.Add(FionaTheFish, "Fiona")
Dictionary(Of Cat, String)
Dictionary(Of Animal, String)
SomeDictionaryOfCat.Contains(FionaTheFish)
false
Cat
Ne yazık ki, böyle bir arabirimi fiilen kullanmanın tek yolu Dictionary
, arabirimi uygulayan bir sınıfta bir nesneyi sarmalamaktır . Bununla birlikte, ne yaptığınıza bağlı olarak, böyle bir arayüz ve izin verdiği çeşitlilik, çabaya değebilir.