Skip to content

ZH TW 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 類別。一般程式碼透過傳入的內容或 CSharpScriptContext.Current 存取遊戲 API,不會自動取得未宣告的全域 UO 變數。

Clone this wiki locally