Структуры (или structs) являются массивами MATLAB® с элементами, к которым получают доступ текстовые полевые указатели.
Структуры состоят из контейнеров данных, названных fields. Каждое поле хранит массив некоторого типа данных MATLAB. Каждое поле имеет уникальное имя.
Структурам MATLAB упорядочивают списки пар "имя-значение". Вы представляете их в C# путем определения struct.NET или класса, пока это имеет поля public
или свойства, соответствующие структуре MATLAB. Поле или свойство в struct.NET или классе могут иметь значение, конвертируемое к и от любого типа данных MATLAB, включая массив ячеек или другую структуру. Примеры в этой статье используют и.NET struct
s и классы.
В MATLAB, студенческая структура, содержащая name
, score
и grade
, создаются можно следующим образом:
S.name = 'Ed Plum'; S.score = 83; S.grade = 'B+'
S
) с тремя полями: S = name: 'Ed Plum' score: 83 grade: 'B+'
(1,3)
создается. Например:S(2).name = 'Tony Miller'; S(2).score = 91; S(2).grade = 'A-';
S(3).name = 'Mark Jones'; S(3).score = 85; S(3).grade = 'A-';
Вы создаете структуры.NET и классы, чтобы упорядочить данные к и от структур MATLAB.
Student
struct
.NET является примером.NET struct
, который упорядочивает типы.NET как входные параметры к функции MATLAB, такие как sortstudents
, с помощью public
fields and properties. Отметьте публично заявленное поле name
и свойства grade
и score
.
В дополнение к использованию.NET struct
отметьте следующее:
Student
может также быть задан как класс.
Даже при том, что в этом примере комбинация полей public
и свойств используется, можно также использовать только поля или свойства.
Класс C# SimpleStruct
использует public
читаемые свойства, как введено к MATLAB и использует конструктора public
при маршалинге, как выведено из MATLAB.
Когда этот класс передается как вход функции MATLAB, это приводит к struct MATLAB с полями Field1
и Field2
, которые заданы как public
читаемые свойства. Когда struct MATLAB с именами полей, Field1
и Field2
передаются из MATLAB, это используется в качестве целевого типа.NET (string
и double
, соответственно), потому что это имеет конструктора с входными параметрами Field1
и Field2
.
Функция MATLAB sortstudents
берет в массиве структур student
и сортирует входной массив в порядке возрастания по счету каждого студента. Каждый элемент в массиве struct
представляет различную информацию о student
.
Интерфейс C# StudentSorter
и метод sortstudents
обеспечен, чтобы показать эквивалентную функциональность в C#.
Ваши структуры.NET и классы должны придерживаться конкретных требований, и на основе уровня определения объема (поля и на основе свойств в противоположность конструктору, например) и упорядочиваете ли вы типы.NET к или от структуры MATLAB. Смотрите Используя Структуры.NET и Классы для деталей.
Интерфейс StudentSorter.NET, с методом sortstudents
, использует ранее заданный.NET struct Student
для вводов и выводов. При маршалинге структур для ввода и вывода на.NET Студенческий struct или класс должны быть включены в атрибут MWStructureList
. Отошлите документацию для этого пользовательского атрибута в документации API, расположенной в
.$MPS_INSTALL/client
Когда вы запускаете приложение, следующий вывод сгенерирован:
Unsorted list of students : Tony Miller : A : 90 Ed Plum : B+ : 80 Mark Jones : A- : 85 Sorted list of students : Ed Plum : B+ : 80 Mark Jones : A- : 85 Tony Miller : A : 90 Press any key to continue . . .
В дополнение к использованию методов описал в Использовании Структур.NET и Классов, атрибуты также обеспечивают универсальные способы упорядочить типы.NET к и от структур MATLAB.
Производство MATLAB Server™-defined приписывают MWStructureList
, может быть ограничено по объему в поле, свойстве, методе или интерфейсном уровне..
В следующем примере функция MATLAB берет массив cell
(вектор), как введено содержащий различный MATLAB типы данных struct
, и возвращает массив cell
(вектор), как выведено содержащий измененные версии входа struct
s.
Функция MATLAB превосходит в цене
Задайте массив cell
с помощью двух типов struct.NET:
Типы Struct1 и Struct2 struct.NET
Не используя атрибут MWStructureList
, сигнатуру метода C# в интерфейсе StructExample
, следующие:
public interface StructExample { public object[] modifyinput(object[] cellArrayWithStructs); }
Обратите внимание на то, что эта подпись, как записано, не предоставляет информации о типах структуры, которые тот cellArrayWithStructs
включает во время выполнения. При помощи атрибута MWStructureList
, однако, вы задаете те типы непосредственно в сигнатуре метода:
public interface StructExample { [MWStructureList(typeof(Struct1), typeof(Struct2))] public object[] modifyinput(object[] cellArrayWithStructs); }
Атрибут MWStructureList
может быть ограничен по объему в:
В этом примере атрибут MWStructureList
используется в качестве method attribute для маршалинга обоих типы ввода и вывода.
public interface StructExample { [MWStructureList(typeof(Struct1), typeof(Struct2))] public object[] modifyinput(object[] cellArrayWithStructs); }
В этом примере struct вводит Struct1
, и Struct2
не представлены методу modifyinputNew
, потому что modifyinputNew
является подписью отдельного метода
public interface StructExample { [MWStructureList(typeof(Struct1), typeof(Struct2))] public object[] modifyinput(object[] cellArrayWithStructs); public object[] modifyinputNew(object[] cellArrayWithStructs); }
Когда используется на интерфейсном уровне, атрибут совместно используется всеми методами интерфейса.
В следующем примере и modifyinput
и методы modifyinputNew
совместно используют интерфейсный атрибут MWStructureList
, потому что атрибут задан до объявления interface
.
[MWStructureList(typeof(Struct1), typeof(Struct2))] public interface StructExample { public object[] modifyinput(object[] cellArrayWithStructs); public object[] modifyinputNew(object[] cellArrayWithStructs); }
Запишите интерфейс с помощью полей public
или свойств public
.
Можно представлять этот тип.NET struct
в трех способах использовать поля и свойства:
В поле:
Используя поле public
и атрибут MWStructureList
:
public struct StructWithinStruct { [MWStructureList(typeof(Struct1), typeof(Struct2))] public object[] cellArrayWithStructs; }
В свойстве, и для get
и для методов set
:
Используя свойства public
и атрибут MWStructureList
:
public struct StructWithinStruct { private object[] arr; [MWStructureList(typeof(Struct1), typeof(Struct2))] public object[] cellArrayWithStructs { get { return arr; } set { arr = value; } } }
В свойстве, для обоих или или get
или методы set
, в зависимости от того, будет ли этот struct использоваться в качестве входа к MATLAB или выводу из MATLAB:
public struct StructWithinStruct { private object[] arr; public object[] cellArrayWithStructs { [MWStructureList(typeof(Struct1), typeof(Struct2))] get { return arr; } [MWStructureList(typeof(Struct1), typeof(Struct2))] set { arr = value; } } }
Последние два примера, которые показывают атрибуты, используемые в свойстве, приводят к тому же результату.