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