Сохранение состояния в методе расширения

Команда C# ранее рассматривала возможность добавления расширения свойства, события и т. д. в C#.

Per Eric Lippert:

http://blogs.msdn.com/b/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx

Чтобы эти функции были полезными однако они должны были бы иметь возможность хранить какое-то новое состояние с объектом. Кажется, что единственный способ сделать это — использовать словарь и связать каждый экземпляр объекта с любым дополнительным состоянием.

Было бы полезно, если бы можно было скопировать эту функциональность «вручную», создав собственный словарь (и, возможно, получить/установить методы расширения). Однако для того, чтобы связать конкретный экземпляробъекта с некоторым состоянием, вам потребуется хешировать фактическую ссылкуна объект.В другом языке вы можете сделать это, хешировав его расположение в памяти, однако в C# это не гарантирует неизменности, и использование небезопасного кода для реализации этой функции в любом случае далеко от идеала.

Кто-нибудь знает, можно ли получить хешируемую ссылку на объект, которая не меняется при изменении внутреннего состояния объекта? Очевидно, существует какой-то внутренний механизм для отслеживания отдельных объектов независимо от их местоположения в памяти, но я не уверен, что он доступен пользовательскому коду.

Примечание: Простое хеширование самого объекта вообще не будет работать, потому что GetHashCode() зависит от внутреннего состояния объекта, а не от , каким объектомон является.

Спасибо за любую информацию.

10
задан MgSam 18 May 2012 в 14:53
поделиться