В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Ответ - это; это перерывает домен целого приложения - то есть, каждый блок, в настоящее время загружаемый Вашим приложением.
/// <summary>
/// Returns all types in the current AppDomain implementing the interface or inheriting the type.
/// </summary>
public static IEnumerable<Type> TypesImplementingInterface(Type desiredType)
{
return AppDomain
.CurrentDomain
.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => desiredType.IsAssignableFrom(type));
}
Это используется как это;
var disposableTypes = TypesImplementingInterface(typeof(IDisposable));
можно также хотеть, чтобы эта функция нашла фактические конкретные типы - т.е. отфильтровывание кратких обзоров, интерфейсов и универсальных определений типа.
public static bool IsRealClass(Type testType)
{
return testType.IsAbstract == false
&& testType.IsGenericTypeDefinition == false
&& testType.IsInterface == false;
}
Взгляните на Assembly.GetTypes()
метод. Это возвращает все типы, которые могут быть найдены в блоке. Все, что необходимо сделать, должно выполнить итерации через каждый возвращенный тип и проверку, если это реализует необходимый интерфейс.
На способа сделать так использует Type.IsAssignableFrom
метод.
Вот пример. myInterface
интерфейс, реализации которого Вы ищете.
Assembly myAssembly;
Type myInterface;
foreach (Type type in myAssembly.GetTypes())
{
if (myInterface.IsAssignableFrom(type))
Console.WriteLine(type.FullName);
}
я полагаю, что это не очень эффективный способ решить Вашу проблему, но по крайней мере, это - хорошее место для запуска.
Assembly assembly = Assembly.GetExecutingAssembly();
List<Type> types = assembly.GetTypes();
List<Type> childTypes = new List<Type>();
foreach (Type type in Types) {
foreach (Type interfaceType in type.GetInterfaces()) {
if (interfaceType.Equals(typeof([yourinterfacetype)) {
childTypes.Add(type)
break;
}
}
}
, Возможно, что-то как этот....
Вы имеете в виду все интерфейсы, которые реализует Тип?
Как это:
ObjX foo = new ObjX();
Type tFoo = foo.GetType();
Type[] tFooInterfaces = tFoo.GetInterfaces();
foreach(Type tInterface in tFooInterfaces)
{
// do something with it
}
Hope tha helpts.
Необходимо циклично выполниться по всем блокам, которыми Вы интересуетесь. От блока можно получить все типы, которые он определяет. Обратите внимание на это, когда Вы сделаете AppDomain. CurrentDomain. Блоки Вы только получаете блоки, которые загружаются. Блоки не загружаются, пока они не необходимы, так, чтобы средства, что необходимо явно загрузить блоки, прежде чем Вы начнете искать.