Skip to content

JA 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 1 つで十分です。ゲーム クラスでは、API はパラメータまたはフィールドを通じて明示的に渡されます。任意の通常のプロジェクトは、それ自体ではグローバル UO を受け取りません。

公式ドキュメント: プログラムとスクリプトの構造 - Microsoft Learn。

通常の .cs または .csproj では、アセンブリに ICSharpScript が含まれていても Main またはトップレベルステートメントが優先されます。実行可能なエントリポイントがない場合は、パブリックで非抽象、パブリックな引数なしコンストラクターを持つ ICSharpScript クラスを 1 つ提供してください。通常のコードでは渡されたコンテキストまたは CSharpScriptContext.Current 経由でゲーム API を使用し、未宣言のグローバル変数 UO は提供されません。

Clone this wiki locally