Просмотр полной версии : C# скрипт, передача в метод типа nullable
Здравствуйте!
Скажите пожалуйста, проблема в следующем: имеется переменная Параметр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
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;
}
}
Но делать так конечно не желательно - не ООП получается
Вообще этот код даже не компилируется.
Что вы вообще хотите сделать?
Если хотите напрямую писать в выход в методе, то так и пишите:
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);
}
}
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot