我已经定义了一个程序集级别的特性类
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
,但我想确保我没有忽略任何微妙之处。
Bar+Baz
,而不是Bar.Baz
,对吧? - Marc Gravell