Тихая Гавань
Тихая Гавань личный блог
29 сентября 2018, 19:39

Вопрос программистам

Всем привет друзья.

пишу робота под америку и столкнулся вот с такой проблемой: 

писал всегда на СИ подобном языке )) МКЛ это усеченный до нельзя СИ. и тем не менее все хорошо писалось.. 

сейчас же пишу под нинзю, а в нинзе си шарп. и вот с такой задачей уже долгое время не могу справиться: 

как писал на МКЛ: 

создаю структуру:
//--------------------------------------------------------------------------------------------
struct sDataBar     { ... };
//--------------------------------------------------------------------------------------------    

создаю 2 экземпляра стуктуры:
sDataBar     OsnDataBar;       // Структура с ДАННЫМИ на баре для основного ТФ
sDataBar     HlpDataBar;       // Структура с ДАННЫМИ на баре для вспомогательного ТФ

далее в теле программы:
передаю в цикле на каждый бар обе структуры 

MathDataForBar(OsnDataBar, i, 1);
MathDataForBar(HlpDataBar, i, 2);

в самой функции принимаю структуру так: 
void MathDataForBar(sDataBar &DataBar,int i, int variant)
{
...
//делаю с данными шпили вили ))
...
}

ключевая фишка в СИ это передача по ссылке &
я просто передаю в функцию указатель на необходимую мне структуру, и уже непосредственно в функции работаю с той структурой — ссылку на которую передал.

но блин не тут то было в СИ ШАРПЕ (( заветная & нифига не работает (( 
а читать пруфы не могу ибо туп (( мне надо на пальцах (( 

люди добрые программисты, если вы есть, и если вы можете для чайника на пальцах описать как это воплотить в шарпе — буду крайне признателен и благодарен!

48 Комментариев
  • Тарас Громницкий
    29 сентября 2018, 19:44

    Если вам нужно менять структуру в методе, передавая её как параметр, то есть ключевые слова ref и out.

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

    Кроме того, в C# есть разница между Value и Reference type сущностями.

    Вторые всегда передаются по ссылке, поэтому & не требуется.

    Но Struct — это value type.

  • Тарас Громницкий
    29 сентября 2018, 19:57

    Тихая Гавань, тогда определяйте метод так

    void MathDataForBar(ref sDataBar DataBar,int i, int variant)
    {
    ...
    //делаю с данными шпили вили ))
    ...
    }

    А вызывайте его так

    MathDataForBar(ref OsnDataBar, i, 1);
    MathDataForBar(ref HlpDataBar, i, 2);

    Для внеклассного чтения

    docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/ref
    docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/out
    stackoverflow.com/questions/1516876/when-to-use-in-vs-ref-vs-out

  • Cheshirscy
    29 сентября 2018, 22:29
    Если коротко и без прелюдий, то вместо структуры используй класс и создай объект этого класса. Структуры в шарпе используются для специфических случаев
  • Cheshirscy
    29 сентября 2018, 22:52
    А пока и не надо понимать просто вместо ключевого слова struct используй class. И когда в первый раз обращаешься к классу используй слово new. Остальное все тоже самое что и со структурами

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн