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

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

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

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

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

MATLAB
Ввод
Самый близкий Тип <— — — — — Другое Соответствие с Типами.NET — — — — —> Наименьшее закрывает Тип
Снабдите каждый тип.NET предисловием с System.
логическийBooleanБайтSByteInt16Uint16Int32Uint32Int64Uint64Единственный'double'Объект
'double''double'ЕдинственныйДесятичное числоInt64Uint64Int32Uint32Int16Uint16SByteБайтОбъект
единственныйЕдинственный'double'Десятичное числоОбъект        
int8SByteInt16Int32Int64Единственный'double'Объект     
uint8БайтUint16Uint32Uint64Единственный'double'Объект     
int16Int16Int32Int64Единственный'double'Объект      
uint16Uint16Uint32Uint64Единственный'double'Объект      
int32Int32Int64Единственный'double'Объект       
uint32Uint32Uint64Единственный'double'Объект       
int64Int64'double'Объект         
uint64Uint64'double'Объект         
'char''char'СтрокаОбъект         
строкаСтрокаОбъект          

Следующие примитивные типы аргумента.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 массив на.NET System.String объект. Передать массив char массивы, создайте массив ячеек.

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

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

  • Значение строки <missing> к пустому указателю.

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

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

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

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

  • null значение

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

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

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

Передача нулевых значений

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')

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

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

При вводе:

String.Concat(str1,str2)

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

ИмяВозвратите типАргументыСпецификаторы
ConcatSystem.String RetVal(System.Object arg0,
System.Object arg1)
Static
ConcatSystem.String RetVal(System.String str0,
System.String 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(System.Object arg0,
System.Object arg1)

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

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

Передача массивов

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

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

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

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

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

Преобразование массива MATLAB к System.Object

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

Передача массивов MATLAB как зубчатых массивов

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

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

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