gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:03:16 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com