Я пытаюсь получить доступ ко всем объявленным пользователем классам в моем проекте.Моя цель - вызывать функции классов, к которым я обращаюсь.Я исследовал это в течение 2-3 дней, но я не мог найти никаких решений.
Я пытался получить типы из сборки, но это дало мне такие сложные результаты.Вот что я попробовал:
Assembly assembly = AppDomain.CurrentDomain.GetAssemblies();
Type[] types = assembly.GetTypes();
int i;
for ( i = 0 ; i < types.Length ; i++ )
{
Console.WriteLine( types[ i ].Name );
}
Быстрый пример - Если какой-либо другой программист, работающий над проектом, создает класс с именем «Hello», мне нужно получить этот класс и вызвать внутри него требуемую функцию.
Я застрял в части "получение классов, объявленных пользователем / программистом", любая помощь великолепна.
Обновление: Спасибо всем за помощьиз.Мне удалось решить эту проблему, создав собственный атрибут, аналогичный тому, что предлагает @ Ghost4Man.Мой новый код выглядит так:
public void Test()
{
foreach ( Assembly a in AppDomain.CurrentDomain.GetAssemblies() )
{
Type[] array = a.GetTypes();
for ( int i = 0 ; i < array.Length ; i++ )
{
Type t = array[ i ];
DConsoleRequired dConsoleRequired = ( DConsoleRequired )
t.GetCustomAttributes( typeof( DConsoleRequired ) , false )[ 0 ];
if ( dConsoleRequired != null )
{
Debug.Log( t.Name );
}
}
}
}
Обновление 2: Обновленный код
public void Test2()
{
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
Type[] types = new Type[ assemblies.Length ];
int i;
for ( i = 0 ; i < assemblies.Length ; i++ )
{
types = assemblies[ i ].GetTypes();
for ( int j = 0 ; j < types.Length ; j++ )
{
var type = types[ j ];
if ( ConsoleRequiredAttribute.IsDefined( type , typeof( ConsoleRequiredAttribute ) ) )
{
Debug.Log( type.Name );
}
}
}
}