在扩展方法中保留状态

MgS*_*Sam 10 c# extension-methods state dictionary reference

C#团队之前曾考虑过向C#添加扩展属性,事件等.

Per Eric Lippert:

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

然而,要使这些特征有用,它们必须能够用对象存储一些新的状态.看起来这样做的唯一方法是使用字典并将对象的每个实例与其他状态相关联.

如果可以通过创建我自己的字典(以及可能的get/set扩展方法)"手动"复制此功能将是有用的.但是,为了将对象的特定实例与某个状态相关联,您需要散列对该对象的实际引用.在另一种语言中,您可以通过散列其内存位置来实现此目的,但是在C#中不能保证保持不变,并且使用不安全代码来完成此功能远非理想.

有没有人知道是否有可能获得一些对象的可散列引用,该对象在对象的内部状态发生变化时不会发生变化?显然有一些内部机制可以跟踪单个对象而不管它们的内存位置如何,但我不确定它是否暴露给用户代码.

注意:简单地散列对象本身根本不起作用,因为GetHashCode()取决于对象的内部状态而不是它在哪个对象上.

感谢您的任何见解.

SLa*_*aks 15

您正在寻找ConditionalWeakTable类.

  • 哇.另一个案例是"经过10年的C#,我仍然会发现事情".谢谢. (3认同)