Я определил класс атрибута уровня сборки 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
, но я хочу быть уверенным, что не упустил некоторые тонкости.