我发现 C# 中的属性似乎是延迟实例化的。
[A(123)]
class A : Attribute
{
public A(int b)
{
GetType().GetCustomAttributes(true);
}
}
在此示例中,创建新的 A
实例会导致 StackOverflowException
,但如果我删除对 GetCustomAttributes()
的调用,则执行正常进行。
这是为什么呢?对我来说,当属性装饰的类正确初始化时,更有意义。
最佳答案
为什么运行时需要在请求之前实例化类上的所有属性?这就像问为什么运行时不提前创建我的类的实例,以防万一我以后想使用它。
属性是类的元数据,它们不会以任何方式影响类的工作。只有请求属性的代码关心它,其他人都不关心。所以目前的行为确实有道理。
关于c# - 为什么属性被延迟实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3624075/