Öznitelikler, alt ve üst öğeler aşağıdaki bölümlerde açıklanmaktadır.
Öznitelikler
Öznitelik
Açıklama
enabled
Gerekli öznitelik.
Dizeler için karma kodların uygulama etki alanı temelinde hesaplanıp hesaplanmadığını belirtir.
etkin Öznitelik
Değer
Açıklama
0
Ortak dil çalışma zamanı, uygulama etki alanı temelinde dizeler için karma kodları hesaplamaz; Dize karma kodlarını hesaplamak için tek bir algoritma kullanılır. Bu varsayılan seçenektir.
1
Ortak dil çalışma zamanı, uygulama etki alanı temelinde dizeler için karma kodları hesaplar. Farklı uygulama etki alanlarındaki ve farklı işlemlerdeki özdeş dizelerin farklı karma kodları olacaktır.
Alt Öğeler
Yok.
Üst Öğeler
Öğe
Açıklama
configuration
Her yapılandırma dosyasında yer alan ve ortak dil çalışma zamanı ve .NET Framework uygulamaları tarafından kullanılan kök öğe.
runtime
Çalışma zamanı başlatma seçenekleri hakkında bilgi içerir.
Açıklamalar
Varsayılan olarak, sınıfı ve String.GetHashCode yöntemi, StringComparer uygulama etki alanları arasında tutarlı bir karma kod oluşturan tek bir karma algoritması kullanır. Bu, öğesinin özniteliğini enabled olarak ayarlamakla <UseRandomizedStringHashAlgorithm>0eşdeğerdir. Bu, .NET Framework 4'te kullanılan karma algoritmasıdır.
StringComparer sınıfı ve String.GetHashCode yöntemi, uygulama etki alanı temelinde karma kodları hesaplayan farklı bir karma algoritması da kullanabilir. Sonuç olarak, eşdeğer dizeler için karma kodları uygulama etki alanlarında farklılık gösterir. Bu bir kabul etme özelliğidir; bundan yararlanmak için öğesinin enabled<UseRandomizedStringHashAlgorithm> özniteliğini olarak 1ayarlamanız gerekir.
Karma tablodaki dize araması genellikle bir O(1) işlemidir. Ancak, çok sayıda çakışma oluştuğunda, arama bir O(n2) işlemine dönüşebilir. Yapılandırma öğesini kullanarak <UseRandomizedStringHashAlgorithm> uygulama etki alanı başına rastgele bir karma algoritması oluşturabilirsiniz. Bu algoritma, özellikle karma kodlarının hesaplandığı anahtarlar kullanıcılar tarafından veri girişine dayandığında olası çakışma sayısını sınırlar.
Örnek
Aşağıdaki örnek, sdeğeri "Bu bir DisplayString dizedir" olan özel dize sabiti içeren bir sınıfı tanımlar. Ayrıca dize değerini ve karma kodunu, yöntemin yürütülmekte olduğu uygulama etki alanının adıyla birlikte görüntüleyen bir ShowStringHashCode yöntem içerir.
C#
using System;
publicclassExample
{
publicstaticvoidMain()
{
// Show hash code in current domain.
DisplayString display = new DisplayString();
display.ShowStringHashCode();
// Create a new app domain and show string hash code.
AppDomain domain = AppDomain.CreateDomain("NewDomain");
var display2 = (DisplayString) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName,
"DisplayString");
display2.ShowStringHashCode();
}
}
publicclassDisplayString : MarshalByRefObject
{
private String s = "This is a string.";
publicoverrideboolEquals(Object obj)
{
String s2 = obj as String;
if (s2 == null)
returnfalse;
elsereturn s == s2;
}
publicboolEquals(String str)
{
return s == str;
}
publicoverrideintGetHashCode()
{
return s.GetHashCode();
}
publicoverride String ToString()
{
return s;
}
publicvoidShowStringHashCode()
{
Console.WriteLine("String '{0}' in domain '{1}': {2:X8}",
s, AppDomain.CurrentDomain.FriendlyName,
s.GetHashCode());
}
}
Module Example
Public Sub Main()
' Show hash code in current domain.
Dim display As New DisplayString()
display.ShowStringHashCode()
' Create a new app domain and show string hash code.
Dim domain As AppDomain = AppDomain.CreateDomain("NewDomain")
Dim display2 = CType(domain.CreateInstanceAndUnwrap(GetType(Example).Assembly.FullName,
"DisplayString"), DisplayString)
display2.ShowStringHashCode()
End Sub
End Module
Public Class DisplayString : Inherits MarshalByRefObject
Private s As String = "This is a string."
Public Overrides Function Equals(obj As Object) As Boolean
Dim s2 As String = TryCast(obj, String)
If s2 Is Nothing Then
Return False
Else
Return s = s2
End If
End Function
Public Overloads Function Equals(str As String) As Boolean
Return s = str
End Function
Public Overrides Function GetHashCode() As Integer
Return s.GetHashCode()
End Function
Public Overrides Function ToString() As String
Return s
End Function
Public Sub ShowStringHashCode()
Console.WriteLine("String '{0}' in domain '{1}': {2:X8}",
s, AppDomain.CurrentDomain.FriendlyName,
s.GetHashCode())
End Sub
End Class
Örneği bir yapılandırma dosyası sağlamadan çalıştırdığınızda, aşağıdakine benzer bir çıktı görüntüler. Dizenin karma kodlarının iki uygulama etki alanında aynı olduğunu unutmayın.
Console
String 'This is a string.' in domain 'PerDomain.exe': 941BCEAC
String 'This is a string.' in domain 'NewDomain': 941BCEAC
Ancak, aşağıdaki yapılandırma dosyasını örneğin dizinine ekler ve sonra örneği çalıştırırsanız, aynı dizenin karma kodları uygulama etki alanına göre farklılık gösterir.
XML
<?xml version ="1.0"?><configuration><runtime><UseRandomizedStringHashAlgorithmenabled="1" /></runtime></configuration>
Yapılandırma dosyası mevcut olduğunda örnekte aşağıdaki çıkış görüntülenir:
Console
String 'This is a string.' in domain 'PerDomain.exe': 5435776D
String 'This is a string.' in domain 'NewDomain': 75CC8236
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.