PDA

Просмотр полной версии : C# скрипт, передача в метод типа nullable



Igor V
08.02.2017, 13:01
Здравствуйте!

Скажите пожалуйста, проблема в следующем: имеется переменная Параметр1 (вещественная, для записи - т.е. выход)
в модуле C# скрипт, в теле класса мною написана функция

void modeFunc(double? param){
param=5;
}

Затем в execute() вызов : modeFunc(Параметр1);

При этом значение Параметр1 не устанавливается. В чем тут проблема?

SCADAMaster
08.02.2017, 13:15
А почему оно должно устанавливаться? Вы же передаете значение в функцию, а не пишете в выход.
Приложите лучше целиком весь код скрипта - что вы в нем написали.
И посмотрите материалы в интернете по работе с методами в C#:
https://metanit.com/sharp/tutorial/2.8.php

Igor V
08.02.2017, 13:23
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;

[FBRetain]
public partial class ФБ : ScriptBase
{

public override void Execute()
{
modeFunc(ref Параметр1);
}
void modeFunc(ref double? param){
param=5;
}
}

SCADAMaster
08.02.2017, 14:16
Вообще этот код даже не компилируется.
Что вы вообще хотите сделать?
Если хотите напрямую писать в выход в методе, то так и пишите:
public override void Execute()
{
modeFunc();
}
void modeFunc(){
Параметр1=5;
}
}

Но делать так конечно не желательно - не ООП получается

Igor V
08.02.2017, 14:30
Вообще этот код даже не компилируется.
Что вы вообще хотите сделать?
Если хотите напрямую писать в выход в методе, то так и пишите:
public override void Execute()
{
modeFunc();
}
void modeFunc(){
Параметр1=5;
}
}


Но делать так конечно не желательно - не ООП получается


Я бы хотел написать отдельную функцию, в которую в качестве аргумента я бы мог передать выход C# скрипта и вызывать эту функцию через execute(). То, что описали Вы, работает, но в функцию не передается параметр в качестве аргумента, просто внутри функции сразу используется.

SCADAMaster
08.02.2017, 15:13
Параметр - это свойство, и его по ссылке передавать нельзя. Как вариант можете делать так:
public partial class ФБ : ScriptBase
{
public override void Execute()
{
modeFunc("Параметр1");
}
void modeFunc(string st)
{
var elem = HostFB.OutputGroup.GetPin(st).TreePinHlp;
elem.AddAssignValueTask(5,null);
}

}

Igor V
09.02.2017, 11:17
Спасибо большое :)