Отображение.NET Обобщенные методы с использованием отражения

функция showGenericMethods

Функция showGenericMethods, читает объект.NET или полностью определенное имя класса и возвращает массив ячеек имен общего метода в данном классе или объекте. Создайте следующие функции MATLAB®:

function output = showGenericMethods(input)
% if input is a .NET object, get MethodInfo[]
if IsNetObject(input)
    methods = GetType.GetMethods(input);
    % if input is a string, get the type and get get MethodInfo[]
elseif ischar(input) && ~isempty(input)
    type = getType(input);
    if isempty(type)
        disp(strcat(input,' not found'))
        return
    end
    methods = GetMethods(type);
else
    return
end
% generate generic method names from MethodInfo[]
output = populateGenericMethods(methods);

end
function output = populateGenericMethods(methods)
% generate generic method names from MethodInfo[]
index = 1;
for i = 1:methods.Length
    method = methods(i);
    if method.IsGenericMethod
        output{index,1} = method.ToString.char;
        index = index + 1;
    end
end
end
function result = IsNetObject(input)
% Must be sub class of System.Object to be a .NET object
result = isa(input,'System.Object');
end
function outputType = getType(input)
% Input is a string representing the class name
% First try the static GetType method of Type handle.
% This method can find any type from 
% System or mscorlib assemblies
outputType = System.Type.GetType(input,false,false);
if isempty(outputType)
    % Framework's method to get the type failed.
    % Manually look for it in
    % each assembly visible to MATLAB
    assemblies = System.AppDomain.CurrentDomain.GetAssemblies;
    for i = 1:assemblies.Length
        asm = assemblies.Get(i-1);
        % Look for a particular type in the assembly
        outputType = GetType(asm,input,false,false);
        if ~isempty(outputType)
            % Found the type - done
            break
        end
    end
end
end

Отображение Обобщенных методов в классе

Блок NetDocGeneric содержит класс с общими методами.

dllPath = fullfile('c:','work','NetDocGeneric.dll');
asm = NET.addAssembly(dllPath);
asm.Classes
ans = 
    'NetDocGeneric.SampleClass'

Отобразите методы в SampleClass:

showGenericMethods('NetDocGeneric.SampleClass')
ans = 
    'K GenMethod[K](K)'
    'K GenMethodWithMixedArgs[K](K, K, Boolean)'
    'K GenStaticMethod[K](K)'
    'K GenStaticMethodWithMixedArgs[K](K, K, Boolean)'

Отображение Обобщенных методов в типичном классе

Блок NetDocGeneric содержит типичный класс с общими методами.

dllPath = fullfile('c:','work','NetDocGeneric.dll');
asm = NET.addAssembly(dllPath);
asm.GenericTypes
ans = 
    'NetDocGeneric.SampleGenericClass`1[T]'

Отобразите методы в SampleGenericClass:

cls = NET.createGeneric('NetDocGeneric.SampleGenericClass',{'System.Double'});
showGenericMethods(cls)
ans = 
    'System.String ParameterizedGenMethod[K](Double, K)'
    'T GenMethod[T](T)'
    'K GenStaticMethod[K](K)'
    'K GenStaticMethodWithMixedArgs[K](K, K, Boolean)'
    'System.String ParameterizedStaticGenMethod[K](Double, K)'
Была ли эта тема полезной?