C# 通过反射判断属性是否由函数创建
假设我有一个类C# 通过反射判断属性是否由函数创建,c#,reflection,C#,Reflection,假设我有一个类Foo,如下所示: class Foo { public static int Bar() { return 1; } public static int x = Bar(); public static int y = 2; } 我想使用反射来了解: x通过功能条进行初始化 y不是通过功能Bar初始化的 有什么方法可以做到这一点吗?很抱歉,您的属性都不是通过功能栏创建的。您是在谈论初始化还是在何时/何地分配? 请澄清你的
Foo
,如下所示:
class Foo
{
public static int Bar()
{
return 1;
}
public static int x = Bar();
public static int y = 2;
}
我想使用反射来了解:
x
通过功能条进行初始化李>
y
不是通过功能Bar
初始化的
有什么方法可以做到这一点吗?很抱歉,您的属性都不是通过功能栏创建的。您是在谈论初始化还是在何时/何地分配?
请澄清你的问题
这里提出了一个类似的问题:
编辑
根据新信息,您可以更改或利用[过时]
属性:
控制或限制创作。真正的问题是为什么?您可以隐式地控制这个逻辑原因很复杂,我需要解决的原始问题是:在我们的代码库中,我们有一个复杂的类P
,还有一个静态方法CreateP
,它返回P
的实例(P
也可以通过其他方法创建),现在我们想锁定CreateP
的使用,这样就不会通过CreateP
添加更多的P
,同时,由CreateP
创建的原始P
和传递给CreateP
的参数不应该再更改。我将通过向代码库添加单元测试来实现这一点。所以我想扫描所有的程序集,得到所有的P
,找出P
由CreateP
创建的s。这听起来很复杂,但是我会用[Observe]标记静态创建者,这会让其他开发人员无法使用它,你可能需要重新思考你的问题,做你想做的事情并不容易,即使你可以,也可能会比它的价值更麻烦,只需重构代码maybeYes,因此你将该方法标记为[过时]
,然后在每个现有呼叫站点取消显示此警告。然后,这些用法将不再触发警告,但任何新的呼叫站点都会触发。是的,它是通过Bar
初始化的。我认为问题是找出所有属性通过Bar
初始化。在您的代码示例中,Bar
函数没有初始化任何内容,它返回一个值。然后将该值分配给x
。