Упорядочьте структуры MATLAB (структуры) в C#

Структуры (или structs) являются массивами MATLAB® с элементами, к которым получают доступ текстовые полевые указатели.

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

Создание структуры 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 и классы

Вы создаете структуры.NET и классы, чтобы упорядочить данные к и от структур MATLAB.

Student struct.NET является примером.NET struct, который упорядочивает типы.NET как входные параметры к функции MATLAB, такие как sortstudents, с помощью public fields and properties. Отметьте публично заявленное поле name и свойства grade и score.

В дополнение к использованию.NET struct отметьте следующее:

  • Student может также быть задан как класс.

  • Даже при том, что в этом примере комбинация полей public и свойств используется, можно также использовать только поля или свойства.

 Студент Struct.NET

Класс C# SimpleStruct использует public читаемые свойства, как введено к MATLAB и использует конструктора public при маршалинге, как выведено из MATLAB.

Когда этот класс передается как вход функции MATLAB, это приводит к struct MATLAB с полями Field1 и Field2, которые заданы как public читаемые свойства. Когда struct MATLAB с именами полей, Field1 и Field2 передаются из MATLAB, это используется в качестве целевого типа.NET (string и double, соответственно), потому что это имеет конструктора с входными параметрами Field1 и Field2.

 Класс C# SimpleStruct

Функция MATLAB sortstudents берет в массиве структур student и сортирует входной массив в порядке возрастания по счету каждого студента. Каждый элемент в массиве struct представляет различную информацию о student.

Интерфейс C# StudentSorter и метод sortstudents обеспечен, чтобы показать эквивалентную функциональность в C#.

Ваши структуры.NET и классы должны придерживаться конкретных требований, и на основе уровня определения объема (поля и на основе свойств в противоположность конструктору, например) и упорядочиваете ли вы типы.NET к или от структуры MATLAB. Смотрите Используя Структуры.NET и Классы для деталей.

 Функция MATLAB sortstudents

Интерфейс StudentSorter.NET, с методом sortstudents, использует ранее заданный.NET struct Student для вводов и выводов. При маршалинге структур для ввода и вывода на.NET Студенческий struct или класс должны быть включены в атрибут MWStructureList. Отошлите документацию для этого пользовательского атрибута в документации API, расположенной в $MPS_INSTALL/client.

 Интерфейс C# StudentSorter

 Класс C# ClientExample

Когда вы запускаете приложение, следующий вывод сгенерирован:

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;
            } 
        }
    }
    

    Примечание

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