我已经定义了一个程序集级属性类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 { }
}
}
这一切都很好。但是,如果我需要以某种方式引用Mystery
定义在中的私有类MyClass
怎么办?这是可能吗?试图从顶级[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