Index: /Include/Classes/System/String.ab
===================================================================
--- /Include/Classes/System/String.ab	(revision 142)
+++ /Include/Classes/System/String.ab	(revision 143)
@@ -565,4 +565,18 @@
 	End Function
 
+	Override Function GetHashCode() As Long
+#ifdef __STRING_IS_NOT_UNICODE
+		Dim size = (m_Length + 1) >> 1
+#else
+		Dim size = m_Length
+#endif
+		Dim hash = 0 As DWord
+		Dim p = Chars As *Word
+		Dim i As Long
+		For i = 0 To ELM(size)
+			hash = ((hash << 16) + p[i]) Mod &h7fffffff
+		Next
+		Return hash As Long
+	End Function
 Private
 	' メモリ確保に失敗すると元の文字列は失われない。（例外安全でいう強い保障）
@@ -604,23 +618,2 @@
 
 End Class
-
-Function GetMultiByteStr(ByRef s As String) As PCSTR
-#ifdef __STRING_IS_NOT_UNICODE
-	GetMultiByteStr = s.Chars
-#else
-	Dim sizeA = WideCharToMultiByte(CP_THREAD_ACP, 0, s.Chars, s.Length + 1, 0, 0, 0, 0)
-	GetMultiByteStr = GC_malloc_atomic(SizeOf (SByte) * sizeA)
-	WideCharToMultiByte(CP_THREAD_ACP, 0, s.Chars, s.Length + 1, GetMultiByteStr, sizeA, 0, 0)
-#endif
-End Function
-
-Function GetWideCharStr(ByRef s As String) As PCSTR
-#ifdef __STRING_IS_NOT_UNICODE
-	Dim sizeW = MultiByteToWideChar(CP_THREAD_ACP, 0, s.Chars, s.Length + 1, 0, 0)
-	GetWideCharStr = GC_malloc_atomic(SizeOf (WCHAR) * sizeW)
-	MultiByteToWideChar(CP_THREAD_ACP, 0, s.Chars, s.Length + 1, GetWideCharStr, sizeW)
-#else
-	GetMultiByteStr = s.Chars
-#endif
-End Function
-
