exponenta event banner

Передача данных в объекты .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ДваждыОбъект         
случайная работаСлучайная работаПоследовательностьОбъект         
последовательностьПоследовательностьОбъект          

Следующие примитивные типы аргументов .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> в значение 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 Arguments.

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

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

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

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

  • Структурные массивы

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

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

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

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 существует и ищет подпись с двумя входными аргументами. В следующей таблице показаны две подписи.

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

С тех пор str1 и str2 имеют класс System.StringMATLAB выбирает вторую сигнатуру и отображает:

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 меньше или равна ожидаемой размерности. Например, скалярный ввод можно передать методу, который ожидает 2-D массив.

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

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

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

Передать массивы MATLAB как массивы с зазубринами

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

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

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