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

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

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

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

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

MATLAB
Ввод
Самый близкий Тип <— — — — — Другое Соответствие с Типами.NET — — — — —> Наименьшее закрывает Тип
Снабдите каждый тип.NET предисловием с System.
логическийБулевская переменнаяБайт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 к объекту System.String.NET. Чтобы передать массив массивов char, создайте массив ячеек.

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

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

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

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

Передача системы. Тип Nullable

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

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

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

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

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

Для примеров смотрите Систему Передачи. Аргументы 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. Чем ближе входящий тип к ожидаемому типу, тем лучше соответствие.

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

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

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

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

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

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

При вводе:

String.Concat(str1,str2)

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

СпецификаторыВозвратите типИмяАргументы
StaticSystem.String RetValConcatсистема. arg0,
Система. arg1),
StaticSystem.String RetValConcatсистема. str0 в виде строки,
Система. str1 в виде строки),

Поскольку 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 как Зубчатые Массивы.

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

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

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

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

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

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

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

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

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

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

Для просмотра документации необходимо авторизоваться на сайте