Вводы и выводы переменной длины кода для клиента.NET

Поддержки клиентов MATLAB® Production Server™.NET возможность MATLAB работы с входными параметрами переменной длины. Смотрите Ссылку функции MATLAB для полной информации на varargin и varargout.

Используя varargin с Клиентом.NET

Вы передаете входные параметры переменной MATLAB (varargin) с помощью ключевого слова params.

Например, считайте функцию MATLAB varargintest, который берет вход переменной длины (varargin) — содержащий строки и целые числа — и возвращает массив cell s (o).

 Пример 1. Функция MATLAB varargintest
function o = varargintest(s1, i2, varargin)

o{1} = s1;
o{2} = i2;
idx = 3;
for i=1:length(varargin)
   o{idx} = varargin{i};
   idx = idx+1;
end

Интерфейс C# VararginTest реализует функцию MATLAB varargintest.

 Пример 2. Интерфейс C# VararginTest
public interface VararginTest
{
    object[] varargintest(string s, int i, params object[] objArg);
}

Поскольку вы отправляете вывод в массивы cell в MATLAB, вы задаете совместимый тип массива C# object[] в вашем интерфейсе. objArg задает количество переданных входных параметров — в этом случае, два.

Метод C# TryVarargin реализует VararginTest, отправляя две строки и два целых числа к развернутой функции MATLAB, чтобы быть возвращенным как массив cell.

 Пример 3. Метод C# TryVarargin
public static void TryVarargin()
{
    MWClient client = new MWHttpClient();
    VararginTest mpsexample = 
         client.CreateProxy<VararginTest>(new Uri("http://localhost:9910/mpsexample"));
    object[] vOut = mpsexample.varargintest("test", 20, false, new int[]{1,2,3});
    Console.ReadLine();
}

Отметьте применяющие лучшые методы кодирования, проиллюстрированные этим примером:

Используя varargout с Клиентом.NET

Выходные аргументы переменной MATLAB (varargout) получены путем передачи экземпляра массива System.Object[]. Массив передается с атрибутом [varargout], заданный в блоке Mathworks.MATLAB.ProductionServer.Client.dll.

Прежде, чем передать экземпляр System.Object[], инициализируйте экземпляр System.Object массивов с максимальной длиной переменной в вашем вызывающем методе. Массив ограничивается одной размерностью.

Например, считайте функцию MATLAB varargouttest, который берет один вход переменной длины (varargin) и возвращается, одна переменная длина вывела (varargout), а также две непеременных длины выходные параметры (out1 и out2).

 Пример 4. Функция MATLAB varargouttest
functionout [out1 out2 varargout] = varargouttest(in1, in2, varargin)

out1 = modifyinput(in1);
out2 =modifyinput(in2);

for i=1:length(varargin)
    varargout{i} = modifyinput(varargin{i});
end

function out = modifyinput(in)
if ( isnumeric(in) )
    out = in*2;
elseif ( ischar(in) )
    out = upper(in);
elseif ( islogical(in) )
    out = ~in;
else 
    out = in;
end

Реализуйте функцию MATLAB varargouttest с интерфейсом C# VarargoutTest.

В методе интерфейса varargouttest вы задаете несколько непеременных длин выходные параметры (o1 и o2, с помощью ключевого слова out, описанного в Коде Несколько Выходных параметров для Клиента.NET C#), вход double (in1) и вход char (in2).

Вы передаете вывод переменной длины (o3) с помощью одно-мерного массива (object[] с атрибутом [varargout]), экземпляр System.Object[].

Как с Использованием varargin с Клиентом.NET, вы используете ключевое слово params, чтобы передать вход переменной длины.

 Пример 5. Интерфейс C# VarargoutTest
public interface VarargOutTest
{
    void varargouttest(out double o1, out string o2, double in1, string in2,
        [varargout]object[] o3, params object[] varargIn);     
}

В вызывающем методе TryVarargout обратите внимание, что и тип и длина вывода переменной (varargOut) передаются ((short)12).

 Пример 6. Метод C# TryVarargout
public static void TryVarargout()
{
    MWClient client = new MWHttpClient();
    VarargOutTest mpsexample = 
       client.CreateProxy<VarargOutTest>(new Uri("http://localhost:9910/mpsexample"));

    object[] varargOut = new object[3]; // get all 3 outputs
    double o1;
    string o2;
    mpsexample.varargouttest(out o1, out o2, 1.2, "hello", 
                       varargOut, true, (short)12, "test");

    varargOut = new object[2];  // only get 2 outputs
    double o11;
    string o22;
    mpsexample.varargouttest(out o11, out o22, 1.2, "hello", 
                         varargOut, true, (short)12, "test");
}

Примечание

Гарантируйте, что вы инициализируете varargOut к соответствующей длине прежде, чем передать его как вход к методу varargouttest.

Отметьте применяющие лучшые методы кодирования, проиллюстрированные этим примером:

  • И подпись функции MATLAB и подпись метода интерфейса C# используют имя varargouttest. И MATLAB и код C# обрабатывают вход переменной длины, переменная длина вывод, и два несколько непеременных длин выходные параметры.

  • Интерфейс.NET MATLAB поддерживает прямое преобразование между массивами ячеек MATLAB и массивами объектов C#. Смотрите Преобразование Данных с C# и Типами MATLAB и Преобразование Между Типами MATLAB и Типами C# для получения дополнительной информации.