c# - 在扩展方法中保存状态

标签 c# dictionary reference extension-methods state

C# 团队之前考虑过向 C# 添加扩展属性、事件等。

埃里克·利珀特:

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

但是,要使这些功能有用,它们必须能够使用对象存储某种新的状态。看起来唯一的方法是使用字典并将对象的每个实例与附加状态相关联。

如果可以通过创建我自己的字典(也许还有获取/设置扩展方法)“手动”复制此功能,那将会很有用。但是,为了将对象的特定实例 与某种状态相关联,您需要对对象的实际引用 进行哈希处理。在另一种语言中,您可以通过散列其内存位置来实现这一点,但在 C# 中,不能保证保持不变,并且使用不安全代码来实现此功能无论如何都远非理想。

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

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

感谢您的任何见解。

最佳答案

您正在寻找 ConditionalWeakTable class .

关于c# - 在扩展方法中保存状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10654925/

相关文章:

c# - 使用int和string将数组转换为字典c#

c++ - 引用如何不需要存储?

c# - 使用 ABOT 抓取站点地图

c# - Azure 服务总线规则名称最大长度

c# - C#中的跨线程事件处理

c# - 我怎样才能改进这个性能不佳、糟糕的串行端口代码?

list - 如何在 Scala 中制作简单的列表?

ios - 如何从嵌套数组/字典 iOS 7 中获取值

c++ - 我们应该在通过引用传递之前取消引用指针吗?

c++ - 用成员初始化列表初始化类对象的引用变量?