Skip to content

RU CSharp Structure

Codex edited this page Oct 11, 2026 · 2 revisions

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

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

Руководство C# · Примеры UO

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

Встроенный сценарий получает UO, Args, Cancellation и WaitAsync. Операторы выполняются сверху вниз. Класс Program не нужен.

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 или верхнеуровневый код. Пространства имён, несколько файлов и собственные библиотеки оформляются как стандартный C#-проект.

// 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 описывает целевую платформу, исходники, зависимости и параметры компиляции. .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