Используйте handle
класс findobj
метод для поиска объектов, которые имеют свойства с определенными значениями. Например, следующий класс задает PhoneBook
объект для представления записи телефонной книги в основе данных. The PhoneBook
классы подклассы dynamicprops
класс, который происходит от handle
.
classdef PhoneBook < dynamicprops properties Name Address Number end methods function obj = PhoneBook(n,a,p) obj.Name = n; obj.Address = a; obj.Number = p; end end end
Вот три из PhoneBook
записи в базе данных:
PB(1) = PhoneBook('Nancy Vidal','123 Washington Street','5081234567'); PB(2) = PhoneBook('Nancy Vidal','123 Main Street','5081234568'); PB(3) = PhoneBook('Nancy Wong','123 South Street','5081234569');
Один из этих трех PhoneBook
объекты имеют динамическое свойство:
PB(2).addprop('HighSpeedInternet'); PB(2).HighSpeedInternet = '1M';
Найдите объект, представляющий Nancy сотрудника
Wong
и отобразить имя и число путем конкатенации строк:
NW = findobj(PB,'Name','Nancy Wong'); [NW.Name,' - ',NW.Number]
ans = Nancy Wong - 5081234569
Поиск объектов с определенными именами свойства с помощью -property
опция:
H = findobj(PB,'-property','HighSpeedInternet'); H.HighSpeedInternet
ans = 1M
The -property
Опция позволяет опускать значение свойства и искать объекты, используя только имя свойства.
Поиск определенных комбинаций имен свойства и значений:
H = findobj(PB,'Name','Nancy Vidal','-and','Address','123 Main Street'); H.Number
ans = 5081234568
Все метаклассы получают из handle
класс. Можно использовать handle
findobj
метод для поиска членов класса с определенными настройками атрибутов.
Например, найти абстрактные методы в определении класса путем поиска в meta.class
MethodList
для meta.method
объекты с их Abstract
значение свойства установлено в true
:
Используйте имя класса в символ формате, поскольку класс является абстрактным. Вы не можете создать объект класса:
mc = meta.class.fromName('MyClass');
Поиск по MethodList
список meta.method
объекты для тех методов, которые имеют свои Abstract
значение свойства установлено в true
:
absMethods = findobj(mc.MethodList,'Abstract',true);
methodNames = {absMethods.Name};
Массив ячеек, methodNames
, содержит имена абстрактных методов в классе.
Найдите имена всех свойств в containers.Map
класс, который имеет общие GetAccess
:
Получите meta.class
объект.
Использование findobj
поиск массива meta.property
объекты.
Используйте скобки для создания массива ячеек с именами свойства.
mc = ?containers.Map; mpArray = findobj(mc.PropertyList,'GetAccess','public'); names = {mpArray.Name};
Отображение имен всех containers.Map
свойства, которые имеют общие GetAccess
:
celldisp(names)
names{1} = Count names{2} = KeyType names{3} = ValueType
Определите, есть ли containers.Map
методы классов являются статическими:
~isempty(findobj([mc.MethodList(:)],'Static',true))
ans = 1
findobj
возвращает массив meta.method
объекты для статических методов. В этом случае список статических методов не пуст. Поэтому существуют статические методы, заданные этим классом.
Получите имена любых статических методов из meta.method
массив:
staticMethodInfo = findobj([mc.MethodList(:)],'Static',true);
staticMethodInfo(:).Name
ans = empty
Имя статического метода (в данном случае существует только один) empty
. Вот информация из meta.method
объект для empty
метод:
staticMethodInfo
method with properties: Name: 'empty' Description: 'Returns an empty object array of the given size' DetailedDescription: '' Access: 'public' Static: 1 Abstract: 0 Sealed: 0 Hidden: 1 InputNames: {'varargin'} OutputNames: {'E'} DefiningClass: [1x1 meta.class]