0

我的反思有问题。我需要找到实例化静态成员的类型。我的代码如下所示:

    private class SimpleTemplate : PageTemplate
    {
        internal static readonly IPageProperty NameProperty =
            PropertyRepository.Register("Name");
    }

PropertyRepository 是属性的存储库(显然)。它跟踪使用我正在构建的类型系统注册的所有属性。

为了成功地做到这一点,我需要跟踪所有属性以及定义它们的类型。否则,如果定义了两个具有相同名称的属性,属性存储库将无法区分它们。

所以,我想做的是找出定义 NameProperty 的类型并存储类型和名称。我怎样才能做到这一点?

我想使用强类型,即我不想将类型作为参数发送给PropertyRepository.Register。这很容易出错,因为我无法验证类型参数是否正确。

我想,解决方案将涉及反思。有没有办法使用反射来确定哪种类型调用静态方法?静态属性是使用静态构造函数(编译器生成的)隐式实例化的。有没有办法让我处理那个构造函数?这似乎可行,我只是不知道该怎么做。

换句话说:如果方法 A 调用方法 B,有什么方法 B 可以判断它是使用反射从 A 调用的吗?我想有,但我不知道如何。

有人知道吗?

编辑:我查看了 StackFrame 类,虽然它似乎做了我想要的,但它在生产代码中可能不可靠(我需要它)。

4

1 回答 1

2

几乎是这个问题的重复,但不完全是。不过看看那个人的答案。

就个人而言,我认为我会传递类型。另一种方法是使用属性,例如

[PropertyName("Name")]
private static readonly IPageProperty NameProperty = null;

static
{
    PropertyRepository.RegisterProperties(typeof(SimpleTemplate));
}

PropertyRepostiory.RegisterProperties然后可以使用反射设置只读字段的值(如果这可行 - 我还没有尝试过;可能会强制执行只读)。虽然有点恶心......或者,您可以在需要时从存储库中获取该属性。

于 2008-12-27T19:31:56.707 回答