Skip to content

CSharp Structure

Codex edited this page Oct 11, 2026 · 3 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Структура програми та скрипта

Посібник C# · Приклади UO

Почніть з вибору формату: .csx підходить для невеликого ігрового скрипта, .cs — для звичайного коду C#, а .csproj об’єднує файли й залежності в проєкт. У C# using дозволяє записувати назви типів із простору імен коротше; namespace об’єднує типи під спільною назвою. Клас містить дані й методи. Тіло методу записують у { }, а прості інструкції зазвичай завершують знаком ;.

Простий приклад (Example.csx)

Збережіть цей приклад окремо як Example.csx. Запускайте його незалежно від інших прикладів на сторінці.

Example.csx:

UO.Print("Ready");
await WaitAsync(10);
UO.Print("Done");

Результат:

Ready
Done

Простий приклад (Program.cs + Minimal.csproj)

Збережіть цей приклад окремо як Program.cs. Запускайте його незалежно від інших прикладів на сторінці.

Program.cs:

// PROJECT-EXAMPLE
System.Console.WriteLine("Ready");

Minimal.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
  </PropertyGroup>
  <ItemGroup><Compile Include="Program.cs" /></ItemGroup>
</Project>
dotnet run --project Minimal.csproj

Результат (Minimal.csproj):

Ready

Простий скрипт .csx

У файлі .csx уже доступні UO, Args, Cancellation і WaitAsync. Інструкції виконуються зверху донизу. Клас Program не потрібен. У цьому прикладі скрипт пише повідомлення, чекає 100 мілісекунд і показує координати персонажа.

string message = "Script started";
UO.Print(message);
await WaitAsync(100);
UO.Print($"X={UO.GetX()}, Y={UO.GetY()}");

Скрипт із власною функцією

Оголошення функції описує, що вона робить. Тіло функції виконується лише після виклику. Тут ReportPosition() викликається двічі, з очікуванням між викликами.

void ReportPosition()
{
    int x = UO.GetX();
    int y = UO.GetY();
    UO.Print($"Position: {x}, {y}");
}

ReportPosition();
await WaitAsync(100);
ReportPosition();

Звичайна програма .cs

У звичайній програмі виконання починається з методу Main або верхньорівневих інструкцій. Приклад нижче показує класичну структуру: простір імен, клас Program і метод Main. Console.WriteLine пише в консоль; для повідомлення в грі використовуйте API ігрової сесії.

// PROJECT-EXAMPLE
using System;

namespace UserTools;

internal static class Program
{
    private static int Main(string[] args)
    {
        Console.WriteLine(args.Length > 0 ? args[0] : "Ready");
        return 0;
    }
}

Файл проєкту

Файл .csproj визначає цільову платформу .NET, вихідні файли, залежності та параметри компіляції. Код зберігається у файлах .cs. Скрипт .csx має інший спосіб запуску: просте перейменування файлу не додає потрібного класу чи точки входу.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

У невеликому проєкті поруч лежать MyScript.csproj і Program.cs; додаткові класи можна розмістити в папках Models/ та Services/. Для короткого ігрового скрипта достатньо одного .csx. У звичайному класі ігровий API передають через параметр або поле: глобальний UO зі скрипта не з’являється у довільному проєкті автоматично.

Офіційна документація: Структура програми та скрипта - Microsoft Learn.

У звичайному .cs або .csproj точка входу Main чи верхньорівневий код має пріоритет, навіть якщо збірка також містить ICSharpScript. Якщо виконуваної точки входу немає, потрібен один відкритий, не абстрактний клас ICSharpScript із відкритим конструктором без параметрів. Ігровий API у звичайному коді доступний через переданий контекст або CSharpScriptContext.Current, а не через неоголошену глобальну змінну UO.

Clone this wiki locally