Изменение полей в упакованых размерных типах через интерфейсы

Комментарии отсутствуют

Хотя задача по изменению полей в упакованных размерных типах на практике может и вовсе не встретиться, но знать о существовании такой возможности, думаю, не помешает. Рассказывать об упаковке и распаковке значимых не вижу особого смысла, поэтому перейду непосредственно к коду.

[code=c#]    internal interface IBoxed
    {
        void SetValue(int value);
    }

    internal struct BoxedType : IBoxed
    {
        private int value;

        public BoxedType(int value)
        {
            this.value = value;
        }

        #region IBoxed Members

        public void SetValue(int value)
        {
            this.value = value;
        }

        public override string ToString()
        {
            return string.Format("Value: {0}", value);
        }

        #endregion
    }

    class Program
    {
        static void Main(string[] args)
        {
            BoxedType b = new BoxedType(5);
            Console.WriteLine("First test: " + b);

            b.SetValue(6);
            Console.WriteLine("Second test: " + b);

            object o = b;
            Console.WriteLine("Third test: " + o);

            ((BoxedType)o).SetValue(3);
            Console.WriteLine("Fourth test: " + o);

            ((IBoxed)b).SetValue(8);
            Console.WriteLine("Fifth test: " + b);

            ((IBoxed)o).SetValue(10);
            Console.WriteLine("Sixth test: " + o);
        }
    } [/code]

Ну и, конечно же, результаты:

First test: Value: 5
Second test: Value: 6
Third test: Value: 6
Fourth test: Value: 6
Fifth test: Value: 6
Sixth test: Value: 10

BoxTypesTest.rar (19,38 kb

Нужна RSS-иконка? Узнай об акции

Комментарии отсутствуют

Некоторое время назад мне пришлось столкнуться с проблемой выбора Rss-иконки для блога. Перепробовал масу вариантов, но не один из них меня так и не удовлетворил. Вчера в очередной раз "бороздя" просторы необьятной блогосферы, наткнулся на довольно интересную акцию "Полный Rss-креатив" на блоге Алексея Качаева. Суть даного мероприятия заключается в следующем: вы пишите пост о проводимой акции, а взамен получаете RSS-иконку - раз, подпись к ней (оригинальную) - это два. К сожалению, моему блогу ещё далеко до 101 подписчика, а так Алексей сотворил бы поэтому поводу уникальную иконку.

PS: надеюсь это не последняя акция на этом блоге, а к моменту проведения следующей постараюсь вырасти.

Шифрование конфигурационных файлов (web.config, app.config)

Комментарии отсутствуют

Тем, кто хоть иногда сталкивался с технологией .NET, наверняка приходилось настраивать конфигурационные файлы приложений, будь-то настольные приложения или же веб-приложения. Если ваше приложение работает с базой данных, то скорей всего вы добавляли в конфигурационные файлы строки следующего формата:





[code=xml]<connectionStrings>
    <add name="Name" connectionString="Data Source=server;User ID=user;Password=pwd;persist security info=False;initial catalog=BlogEngine;" providerName="System.Data.SqlClient" />
</connectionStrings> [/code] В приведённом выше примере имя пользователя и пароль хранятся в открытом виде, что не всегда приемлемо. К счастью, .NET Framework предоставляет средства для скрытия такой информации. Используя утилиту коммандной строки aspnet_regiis.exe (ASP.NET), эту информацию можно зашифровать. Более подробно читаем в MSDN.

К сожалению, если у вас есть веб-приложение, выложенное на каком-то хостинге, запустить утилиту aspnet_regiis.exe вам никто не даст. По этому необходимо искать альтернативные решения. Как вариант, написать код, добавив страницу конфигурации (смотрим прикреплённый файл). Страница конфигурации имеет следующий вид:

Шифрование конфигурационных файлов (web.config, app.config)

Указываем секцию для шифрования, жмём ОК и получаем:

[code=xml]<appSettings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
 <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAsaxvgs6ZWEuISiiBH1xhUgQAAAACAAAAAAADZgAAqAAAABAAAAAp89FcCcjWHQq6vX0s5gg3AAAAAASAAACgAAAAEAAAABdMVsofZYXXxYrZp7YWdy2IAAAACFZiI8SzneG3HnSUtTyo49jGrOOdZxFx9JXe4AJy+mR9LMMOIGTZl9KM3TLXY4GBNQwt3GR2rdoHblcV1Qa1SDWWI5UTtWyRmGuSovIepjboz6WBEF0AKT65W+xgyCg51txL7d76j/PekeS7Hj7sTEskRE48N1xMFLp4F7F10JQIhvaj5hUVhxQAAADwgJ+zt9fzgoU8tKsqwF0odKPrCA==</CipherValue>
      </CipherData>
    </EncryptedData>
  </appSettings>[/code]

Да и еще, шифровать конфигурационный файл веб-приложения нужно непросредственно на хостинге, так как для этой процедуры используется, как я понимаю, специфический ключ компьютера, определённый в разделе <machineKey> файла machine.config. Поэтому попытки зашифровать у себя на машине с последующим выкладыванием на хостинг ни к чему не приведут. В том случае, если у вас есть доступ к серверу или вы хотите зашифровать конфигурационный файл у себя на машине, не используя дополнительную страницу, можно применить следующую утилиту (исходники прилагаются):

 

Указываем конфигурационный файл, имя секции, жмём Go и наслаждаемся результатом. Утилита позволяет шифровать конфигурационные файлы как настольных приложений, так и веб-приложений.

WebApplication(20,08 kb)

WindowsApplication (48,59 kb)

 Удачного вам шифрования! :)

Читаем также:

Кеширование данных с помощью директивы OutputCache

Как разница между методом Response.Redirect и Server.Transfer?

Как разница между методом Finalize и деструктором?