gpt4 book ai didi

c# - System.Runtime.CompilerServices.Dynamic 属性来自哪里,我们应该使用它吗?

转载 作者:行者123 更新时间:2023-11-30 20:26:46 25 4
gpt4 key购买 nike

今天我在看 Nancy 的一些代码因为我喜欢探索代码,所以我注意到了以下事情。

在 VS2017 中导航时,我去了 NancyModule 我从元数据中看到了以下代码:

public virtual void Delete(string path, [Dynamic(new[] { false, true, false })] Func action, Func condition = null, string name = null);`

现在我不知道这个属性是干什么的,所以我立即去了 msdn .

Parameters

transformFlags: Type: System.Boolean[] Specifies, in a prefix traversal of a type's construction, which Object occurrences are meant to be treated as a dynamically dispatched type.

Remarks

For instance, if C is a generic type with two type parameters, a use of the constructed type C might be intended to treat the first type argument dynamically and the second typically, in which case the appropriate attribute specification should use a transformFlags value of { false, true, false }.

在那之后我意识到在 Nancy 的 code 中没有应用这样的属性,所以我想自己“好吧,也许编译器会添加它。”但是,在使用 dnSpy、ilSpy 反编译此程序集后,我根本看不到这样的属性。

所以底线问题是:

  • 此属性是供 .NET Framework 用户使用还是仅供编译器应用(鉴于其命名空间)?
  • 这些标志在其构造函数中意味着什么?我不确定我是否理解什么是类型构造的前缀遍历

最佳答案

C# 中的 dynamic 关键字在元数据和运行时没有专用类型,它只是object。当您添加对程序集的引用时,您希望看到它返回为动态。 C# 编译器也是如此,这是必需的,因此它可以自动生成 Binder 代码。 [Dynamic] 属性可确保发生这种情况。

反编译器会做同样的事情,因此它也不必向您显示此属性。无论您使用什么工具来浏览元数据,都不是那么顺畅并且会泄露细节。

C# 编译器自动发出属性。您无需自己做任何事情。

关于c# - System.Runtime.CompilerServices.Dynamic 属性来自哪里,我们应该使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49511947/

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