Передача данных объектам .NET

Когда вы вызываете метод .NET или функцию из MATLAB®MATLAB автоматически преобразует аргументы в типы .NET. MATLAB выполняет это преобразование для каждого переданного аргумента, за исключением аргументов, которые уже являются объектами .NET. В следующих разделах приведены сведения о передаче определенных типов данных методам .NET.

Передайте примитивные типы .NET

В следующей таблице показаны базовые типы MATLAB для переданных аргументов и соответствующие типы .NET, определенные для входных параметров. Каждая строка показывает тип MATLAB, за которым следует возможный аргумент .NET, соответствующий слева направо в порядке близости соответствия.

Таблица преобразования типов примитивов MATLAB

MATLAB
Напечатать
Ближайший тип < - - - - - Другие подходящие типы .NET - - - - - > Наименее близкий тип
Предисловие к каждому типу .NET с System.
логичныйБулевБайтSByteInt16UInt16Int32UInt32Int64UInt64ОдинокДваждыОбъект
дваждыДваждыОдинокДесятичное числоInt64UInt64Int32UInt32Int16UInt16SByteБайтОбъект
одинокОдинокДваждыДесятичное числоОбъект        
int8SByteInt16Int32Int64ОдинокДваждыОбъект     
uint8БайтUInt16UInt32UInt64ОдинокДваждыОбъект     
int16Int16Int32Int64ОдинокДваждыОбъект      
uint16UInt16UInt32UInt64ОдинокДваждыОбъект      
int32Int32Int64ОдинокДваждыОбъект       
uint32UInt32UInt64ОдинокДваждыОбъект       
int64Int64ДваждыОбъект         
uint64UInt64ДваждыОбъект         
charCharСтрокаОбъект         
строкаСтрокаОбъект          

Следующие типы аргументов .NET не имеют прямых эквивалентных типов MATLAB. MATLAB передает эти типы как есть:

  • System.IntPtr

  • System.UIntPtr

  • System.Decimal

  • перечисляемые типы

Передайте массивы ячеек

Можно передать массив ячеек в свойство .NET или метод, ожидающий массив System.Object или System.String аргументы, как показано в следующей таблице.

Таблица преобразования массива ячеек MATLAB

Тип MATLABБлижайший тип < - - - Другие подходящие типы .NET - - - > Наименее близкий тип

Массив ячеек из строковых скаляров и/или символьных массивов

System.String[]System.Object[]System.Object

Массив ячеек (без строковых или символьных массивов)

System.Object[]System.Object 

Элементы массива камеры могут быть любым из следующих поддерживаемых типов:

Передача непримитивных объектов .NET

При вызове метода, который имеет аргумент конкретного класса .NET, передайте объект, являющийся образцом этого класса или его производных классов. Можно создать такой объект с помощью конструктора классов или использовать объект, возвращенный представителем класса. Когда член класса возвращает объект .NET, MATLAB оставляет его как объект .NET. Используйте этот объект для взаимодействия с другими членами класса.

Передайте данные Строки и Символ MATLAB

MATLAB автоматически преобразует:

  • char массив в System.String .NET объект. Чтобы передать массив char массивы, создайте массив ячеек.

  • string скаляр на System.String .NET объект.

  • Каждый string скаляр в string массив в System.String .NET объект. The string массив преобразуется в System.String[].

  • Строковое значение <missing> в значение null.

  • string.empty на System.String[] с размером 0.

Передайте тип System.Nullable

Можно передать любой из следующих методов .NET с помощью System.Nullable<ValueType> входные параметры:

  • Переменная базового <ValueType>

  • null значение, []

  • System.Nullable<ValueType> объект

Когда вы передаете переменный MATLAB типа ValueTypeMATLAB читает сигнатуру и автоматически преобразует вашу переменную в System.Nullable<ValueType> объект. Полный список возможных ValueType значения, принятые для System.Nullable<ValueType>см. таблицу преобразования типов примитивов MATLAB.

Для примеров смотрите Pass System.Nullable Аргументы.

Передайте значения NULL

MATLAB использует пустые double ([]) значения для аргументов типа ссылки.

Неподдерживаемые типы MATLAB

MATLAB не поддерживает передачу следующих типов MATLAB методам .NET:

  • Массивы структур

  • Разреженные массивы

  • Комплексные числа

Выбор сигнатур метода

MATLAB выбирает правильную сигнатуру метода .NET (включая конструктор, статические и нестатические методы) на основе следующих критериев.

Когда ваша функция MATLAB вызывает метод .NET, MATLAB:

  1. Проверяет, чтобы объект (или класс, для статического метода) имел метод с таким именем.

  2. Определяет, передает ли вызов то же количество аргументов хотя бы одного метода с таким именем.

  3. Проверяет, что каждый переданный аргумент может быть преобразован в тип, заданный для метода.

Если все предыдущие условия удовлетворены, MATLAB вызывает метод.

При вызове перегруженного метода, если существует более одного кандидата, MATLAB выбирает тот, который лучше всего соответствует вызывающим аргументам, на основе таблицы преобразования типов примитивов MATLAB. Во-первых, MATLAB отклоняет все методы, которые имеют любые типы аргументов, несовместимые с переданными аргументами. Среди остальных методов MATLAB выбирает метод с самым высоким значением соответствия, который является суммой значений соответствия всех его аргументов. Значение соответствия для каждого аргумента является близким типом MATLAB к типу .NET. Если два метода имеют одинаковую пригодность, MATLAB выбирает первый, определенный в классе.

Для типов классов MATLAB выбирает сигнатуру метода на основе расстояния между типом входящего класса и ожидаемым типом класса .NET. Чем ближе входящий тип к ожидаемому типу, тем лучше соответствие.

Правила для перегруженных методов с необязательными аргументами описаны в разделе Определение того, какой перегруженный метод вызывается.

Пример - Выбор сигнатуры метода

Откройте a methodsview окно для System.String Класс и смотрите записи для Concat метод:

import System.*
methodsview('System.String')

The Concat метод принимает один или несколько аргументов. Если аргументы имеют тип System.String, метод объединяет значения. Для примера создайте две строки:

str1 = String('hello');
str2 = String('world');

Когда вы вводите:

String.Concat(str1,str2)

MATLAB проверяет метод Concat существует и ищет сигнатуру с двумя входными параметрами. В следующей таблице показаны две сигнатуры.

ИмяТип возвратаАргументыОпределители
ConcatSystem.String RetVal(Система. Возразите arg0,
Система. Возразите arg1),
Static
ConcatSystem.String RetVal(Система. Натяните str0,
Система. Натяните str1),
Static

Начиная с str1 и str2 относятся к System.String классовMATLAB выбирает вторую сигнатуру и отображает:

ans = 
helloworld

Если аргументы имеют тип System.Objectметод отображает строковые представления значений. Для примера создайте два System.DateTime объекты:

dt = DateTime.Today;
myDate = System.DateTime(dt.Year,3,1,11,32,5);

Когда вы вводите:

String.Concat(dt,myDate)

MATLAB выбирает следующую сигнатуру, так как System.DateTime объекты получают из System.Object класс.

ОпределителиТип возвратаИмяАргументы
StaticSystem.String RetValConcat(Система. Возразите arg0,
Система. Возразите arg1),

Этот Concat метод сначала применяет ToString метод к объектам, затем конкатенирует строки. MATLAB отображает такую информацию, как:

ans = 
12/23/2008 12:00:00 AM3/1/2008 11:32:05 AM

Передайте массивы

Для получения информации о передаче массивов MATLAB в методы .NET, смотрите Использование массивов с приложениями .NET и Передача массивов MATLAB в качестве Jagged Arrays.

Как размеры массива влияют на преобразование

Размерностью массива .NET является количество индексов, необходимых для доступа к элементу массива. Чтобы получить количество размерностей, используйте Rank свойство System.Array .NET тип. Размерность массива MATLAB является количеством не синглетных размерностей в массиве.

MATLAB соответствует размерности массива сигнатуре метода .NET, пока размерность массива MATLAB меньше или равна ожидаемой размерности. Для примера можно передать скаляр вход в метод, который ожидает 2-D массив.

Для массива MATLAB с количеством размерностей, N, если массив .NET имеет меньше N размерности, преобразование MATLAB понижает синглтонные размерности, начиная с первого, пока количество остальных размерностей не совпадает с количеством измерений в массиве .NET.

Преобразование массива MATLAB в Объект

Можно передать массив MATLAB в метод, который ожидает System.Object.

Передайте Arrays MATLAB как Jagged Arrays

Массив MATLAB представляет собой прямоугольный массив. .NET Framework поддерживает зубчатый массив, представляющий собой массив массивов. Таким образом элементы массива зубчатая матрица может иметь различные размерности и размеры.

Хотя языки .NET поддерживают зубчатые массивы, термин jagged не является ключевым словом языка. Сигнатуры функции C # используют несколько пар квадратных скобок ([][]), чтобы представлять зубчатый массив. В сложение jagged массива может быть вложенным ([][][]), многомерный ([,]), или вложенный с многомерными элементами (для примера, [,,][,][]).

MATLAB автоматически преобразует массивы MATLAB числовых типов в соответствующий тип резкого массива. Если входной параметр является нечисловым типом или многомерным, используйте NET.createArray функция, чтобы создать массив, который будет проходить как массив с заземлением. Для примеров использование NET.createArray, см. Pass Jagged Массивов.