gpt4 book ai didi

c# - 如果属性仅在它们被反射到时才被构造,为什么属性构造函数如此有限?

转载 作者:太空狗 更新时间:2023-10-29 20:58:54 25 4
gpt4 key购买 nike

如图here ,直到您反射(reflect)以获取属性值之前,不会调用属性构造函数。但是,您可能也知道,您只能将编译时常量值传递给属性构造函数。为什么是这样?我想很多人会非常喜欢做这样的事情:

[MyAttribute(new MyClass(foo, bar, baz, jQuery)]

而不是传递带有这些值的字符串(也导致字符串类型的代码!),转换为字符串,然后依靠 Regex 尝试获取值而不是仅使用实际值,而不是使用编译时警告/errors 取决于可能抛出的异常,这些异常与类无关,只是它调用的方法使用了一些输入错误的属性。

什么限制导致了这个?

最佳答案

属性是元数据的一部分。您需要能够反射(reflect)程序集中的元数据,无需在该程序集中运行代码

例如,假设您正在编写一个编译器,需要从程序集中读取属性以编译某些源代码。您真的要加载并执行引用程序集中的代码吗?您是否要对编译器作者提出要求,要求他们编写的编译器可以在编译期间在引用的程序集中运行任意代码?代码可能会崩溃,或进入无限循环,或联系开发人员无权与之交谈的数据库?可怕的场景数量巨大,我们通过要求属性非常简单来消除所有这些场景。

关于c# - 如果属性仅在它们被反射到时才被构造,为什么属性构造函数如此有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16876208/

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