【发布时间】:2011-11-06 14:49:18
【问题描述】:
我已经定义了一个程序集级属性类FooAttribute,如下所示:
namespace Bar
{
[System.AttributeUsage (System.AttributeTargets.Assembly, AllowMultiple=true)]
public sealed class FooAttribute : System.Attribute
{
public FooAttribute(string id, System.Type type)
{
// ...
}
}
}
我用它来将 id 关联到类,例如:
[assembly: Bar.Foo ("MyClass", typeof (Bar.MyClass))]
namespace Bar
{
public class MyClass
{
private class Mystery { }
}
}
这一切都很好。但是如果我需要以某种方式引用在MyClass 中定义的私有类Mystery 怎么办?这是可能吗?尝试从顶级 [assembly: ...] 指令引用它不起作用,因为该类型不公开可见:
[assembly: Bar.Foo ("Mystery", typeof (Bar.MyClass.Mystery))] // won't work
并尝试将[assembly: ...] 指令放入MyClass 中,以便它可以看到Mystery 是不合法的,因为[assembly: ...] 必须在顶层定义:
namespace Bar
{
class MyClass
{
[assembly: FooAttribute (...)] // won't work either
...
}
}
有一种方法可以从程序集外部访问internal 类型,方法是将用户声明为程序集的朋友,但是在程序集中引用私有类型怎么样?我想这是不可能的,我只需将Mystery 声明为internal,但我想确保我没有错过一些微妙之处。
【问题讨论】:
标签: c# attributes class-attributes