Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Объекты в общем коде доступны только для экземпляра текущего проекта.
project.Context можно передать только в вызов вложенных шаблонов.
Возможность пользоватся одним объектом между разными шаблонами в разных заданиях есть только через project.GlobalVariables и то в виде строк и как исключение в виде объекта для блокировки, но не объекта для данных.
Мой С# бот говорит, что в project.GlobalVariables можно сохранять объекты, но есть нюанс. На практике не пробовал.
Вот ответ:
Да, в ZennoPoster вы можете сохранять объекты C# в глобальных переменных проекта (project.GlobalVariables). Для этого вам нужно выполнить следующие шаги:
1. Создайте объект C#, который вы хотите сохранить. Например, предположим, у вас есть класс MyClass:
C#:
public class MyClass
{
public string Name { get; set; }
public int Age { get; set; }
}
2. Создайте экземпляр этого класса и установите его свойства:
C#:
var myObject = new MyClass();
myObject.Name = "John";
myObject.Age = 25;
3. Сохраните объект в глобальной переменной проекта:
C#:
project.GlobalVariables["myObject"] = myObject;
Теперь ваш объект myObject сохранен в глобальной переменной project.GlobalVariables под ключом "myObject". Вы можете получить доступ к этому объекту в любом месте вашего проекта, используя project.GlobalVariables["myObject"].
Обратите внимание, что при сохранении объектов C# в глобальных переменных проекта, они должны быть сериализуемыми, то есть иметь возможность быть преобразованными в строку и обратно. Если ваш объект не является сериализуемым, вам может потребоваться использовать другие методы сохранения и восстановления объектов, такие как сохранение в файл или использование базы данных.
На взгляд есть подозрение, что данный бот выдал нерабочий код
Но не суть. Наиболее важное в последнем обзаце - сериализация объектов. Это сужает область применения, т.к. зачастую смысл общего объекта как-раз в том чтобы это был один и тот же физический объект с одними и теми же ссылками/указателями, а не его пусть и как-то синхронизированная копия. Таже проблема и с передачей контекста из проекта в подпроект - там тоже, как я понял, происходит сериализация.
Начнем с того, что C# строго типизированный язык и поэтому создать какую либо структуру данных, позволяющую хранить объект произвольного типа - довольно проблематично.
Во - вторых в переменных проекта могут хранится только строки. Чтобы убедиться в этом - достаточно посмотреть на интерфейсы IGlobalVariables и ILocalVariables
Единственный возможный вариант - сериализовать объект в json, сохранять его в глобальную переменную, а где надо - снова преобразовывать в объект из json
Оказался мой косяк, я в бота залил документацию только по ILocalVariables, но сейчас обновил доку у бота и добавил инфу по IGlobalVariables. Сейчас стал отвечать лучше, но все равно есть галлюцинации
Если я вас правильно понял, то можно типа такого исполнить. Приведу пример.
Вот мы в общем коде создаем класс, с методом для вывода сообщения и переменной
C#:
public class Test
{
IZennoPosterProjectModel project;
public Test(IZennoPosterProjectModel project)
{
this.project = project;
}
public int znachenie{get;set;}
public void SendMessage(string message)
{
project.SendInfoToLog(message);
}
}
Затем создали глобальную переменную, в первом кубике мы создаем экземпляр нашего класса и попутно выводим сообщение что бы убедиться что жкземпляр у нас создан, заодно присваиваем значение переменной в нашем объекте. затем делается боксинг и экземпляр класса помещается в глобальную переменную.
C#:
Test a = new Test(project);
a.SendMessage("Сообщение из кубика где мы создали экземпляр класса");
a.znachenie = 45345134; //Присвоили значение переменной
project.GlobalVariables["a22897ec-4f3c-b946-bc6b754f65b3@zenno.club","TestGlobalVariables"].Value = a;
Теперь идем во второй кубик и там мы делаем анбоксинг из глобальной переменной и опять выводим сообщение, демонстрируя что экземпляр класса у нас есть и получаем значение переменной которое мы туда поместили в первом кубике
C#:
Test result = project.GlobalVariables["a22897ec-4f3c-b946-bc6b754f65b3@zenno.club","TestGlobalVariables"].Value;
result.SendMessage("Сообщение из кубика где мы используем экземпляр класса созданный в другом кубике");
result.SendMessage(result.znachenie.ToString()); //выводим значение переменной которое присвоили в первом кубике
Мистика, не понимаю, почему у меня ранее подобное не работало - да, на более сложных классах, но тут не должно быть принципиально это. Нужно еще раз при случае попробовать на реальном кейсе.
Мистика, не понимаю, почему у меня ранее подобное не работало - да, на более сложных классах, но тут не должно быть принципиально это. Нужно еще раз при случае попробовать на реальном кейсе.