больше смысла, что этот атрибут будет применяться только к маршалированной компоновке. Странно, кто-то держал туза за рукав в первые дни, может быть.

отрим следующий код:

using System;
using System.Runtime.InteropServices;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            const string test = "ABCDEF"; // Strings are immutable, right?
            char[] chars = new StringToChar{str=test}.chr;
            chars[0] = 'X';

            // On an x32 release or debug build or on an x64 debug build, 
            // the following prints "XBCDEF".
            // On an x64 release build, it prints "ABXDEF".
            // In both cases, we have changed the contents of 'test' without using
            // any 'unsafe' code...

            Console.WriteLine(test);
        }
    }

    [StructLayout(LayoutKind.Explicit)]
    public struct StringToChar
    {
        [FieldOffset(0)]
        public string str;
        [FieldOffset(0)]
        public char[] chr;
    }
}

Запустив этот код, мы можем изменить содержимое строки без исключения. Нам не нужно было объявлять небезопасный код для этого. Этот код явно очень хитрый!

Мой вопрос просто так: вы думаете, что исключение должно быть сгенерировано кодом выше?

[EDIT1: обратите внимание, что другие люди пробовали это для меня, и некоторые люди получают другие результаты - что не слишком удивительно, учитывая мерзость того, что я делаю ...;)]

[EDIT2: обратите внимание, что я использую Visual Studio 2010 в 64-разрядной версии Windows 7 Ultimate]

[EDIT3: сделал тестовую строку const, просто чтобы сделать ее еще более хитрой!]

Ответы на вопрос(0)

Ваш ответ на вопрос