Для следующего фрагмента кода не требуется небезопасного контекста (и да, он показывает внутренние болты и биты о реализации метода string
GetHashCode
, что показывает его отличие с одним в Java, потому что в C # значение хеш-код не кэшируется и, как правило, показывает, что строки C # не являются окончательно неизменяемыми, как вы, возможно, учили, не можете справиться с фоном Нейманом):
using System;
using System.Runtime.InteropServices;
namespace Guess
{
class Program
{
static void Main(string[] args)
{
const string str = "ABC";
Console.WriteLine(str);
Console.WriteLine(str.GetHashCode());
var handle = GCHandle.Alloc(str, GCHandleType.Pinned);
try
{
Marshal.WriteInt16(handle.AddrOfPinnedObject(), 4, 'Z');
Console.WriteLine(str);
Console.WriteLine(str.GetHashCode());
}
finally
{
handle.Free();
}
}
}
}