プログラムの形
書ける形(18)
Section titled “書ける形(18)”| 書き方 | 説明 |
|---|---|
struct NsHelper { ... } | 同じファイルの補助の型 |
namespace Sample { ... } | 名前空間の宣言 |
namespace Sample.Inner | 入れ子の名前空間 |
using V = UnityEngine.Vector3; | 別名(using エイリアス) |
using static UnityEngine.Mathf; | 静的メンバの using |
UnityEngine.Debug.Log(...) | 完全修飾名 |
public int V; | どこからでも見える範囲 |
private int V; | 宣言した型の中だけの範囲 |
protected int V; | 自分と派生した型 |
internal int V; | 同じプログラムの中 |
protected internal int V; | 同じプログラム、または派生した型 |
private protected int V; | 同じプログラムで、かつ派生した型 |
int a = 1; | 内側の名前による隠蔽 |
int V = 1; | 入れ子での隠蔽 |
for (int i = …) { } | for の変数の範囲 |
global::System.Int32.MaxValue | グローバル名前空間の別名 |
nameof(value) | 引数の名前の文字列化 |
public static void Main() | Main の記述 |
書けない形(3)
Section titled “書けない形(3)”| 書き方 | 説明 | エラー | 理由 | 代わりに |
|---|---|---|---|---|
| 1 ファイルに 2 つの具象の Behaviour | 1 つのファイルが 1 つのプログラム | TUKI0109 | 設計 | ファイルを分ける |
using Tsukimi; と using UdonSharp; の併記 | 同じ綴りの型が 2 つの名前空間から見えている | CS0104 | 設計 | 片方の using を外す |
Take(int v) と Take(ref int v) | 渡し方だけが違うオーバーロード | TUKI0001 | 未実装 | 名前を変える(変数と引数の渡し方) |
1 つのファイルに具象の Behaviour を 2 つ置くと、TUKI0109 で止まります。補助の型は同居できます。 |
見える範囲の修飾子は 6 種すべて書けます。
Main は書けますが呼ばれません。エントリポイントは基底が宣言しているイベント(イベント)で、実行環境がそれを呼び出します。
ファイルの中身
Section titled “ファイルの中身”同じファイルの補助の型
Section titled “同じファイルの補助の型”struct / record / enum / インタフェース / 静的クラスは、同じファイルに同居できます。同居できないのは、2 つめの具象の Behaviour だけです。
using UnityEngine;using Tsukimi;
public struct NsHelper{ public int V;}
public class NsWithHelper : TsukimiBehaviour{ void Start() { NsHelper h = new NsHelper(); Debug.Log(h.V); // => 0 }}名前空間の宣言
Section titled “名前空間の宣言”using UnityEngine;using Tsukimi;
namespace Sample{ public class NsBlock : TsukimiBehaviour { void Start() { Debug.Log(1); // => 1 } }}入れ子の名前空間
Section titled “入れ子の名前空間”using UnityEngine;using Tsukimi;
namespace Sample.Inner{ public class NsNested : TsukimiBehaviour { void Start() { Debug.Log(1); // => 1 } }}ほかの名前空間の参照
Section titled “ほかの名前空間の参照”別名(using エイリアス)
Section titled “別名(using エイリアス)”using UnityEngine;using Tsukimi;using V = UnityEngine.Vector3;
public class NsAlias : TsukimiBehaviour{ void Start() { V v = new V(1f, 2f, 3f); Debug.Log(v); // => 実行環境の値 }}静的メンバの using
Section titled “静的メンバの using”using UnityEngine;using Tsukimi;using static UnityEngine.Mathf;
public class NsUsingStatic : TsukimiBehaviour{ void Start() { Debug.Log(Abs(-1f)); // => 実行環境の値 }}using Tsukimi;
public class NsQualified : TsukimiBehaviour{ void Start() { UnityEngine.Debug.Log(UnityEngine.Mathf.Abs(-1f)); // => 実行環境の値 }}どこからでも見える範囲
Section titled “どこからでも見える範囲”public を付けたフィールドは編集画面に出ます(属性)。
using UnityEngine;using Tsukimi;
public class BcPublic : TsukimiBehaviour{ void Start() { Debug.Log(V); // => 0 }
public int V;}宣言した型の中だけの範囲
Section titled “宣言した型の中だけの範囲”using UnityEngine;using Tsukimi;
public class BcPrivate : TsukimiBehaviour{ void Start() { Debug.Log(V); // => 0 }
private int V;}自分と派生した型
Section titled “自分と派生した型”using UnityEngine;using Tsukimi;
public class BcProtected : TsukimiBehaviour{ void Start() { Debug.Log(1); // => 1 }
protected int V;}同じプログラムの中
Section titled “同じプログラムの中”using UnityEngine;using Tsukimi;
public class BcInternal : TsukimiBehaviour{ void Start() { Debug.Log(V); // => 0 }
internal int V;}同じプログラム、または派生した型
Section titled “同じプログラム、または派生した型”using UnityEngine;using Tsukimi;
public class BcProtInt : TsukimiBehaviour{ void Start() { Debug.Log(V); // => 0 }
protected internal int V;}同じプログラムで、かつ派生した型
Section titled “同じプログラムで、かつ派生した型”using UnityEngine;using Tsukimi;
public class BcPrivProt : TsukimiBehaviour{ void Start() { Debug.Log(V); // => 0 }
private protected int V;}内側の名前による隠蔽
Section titled “内側の名前による隠蔽”using UnityEngine;using Tsukimi;
public class BcSimpleName : TsukimiBehaviour{ void Start() { int a = 1; Debug.Log(a); // => 1 }
private int a = 2;}入れ子での隠蔽
Section titled “入れ子での隠蔽”using UnityEngine;using Tsukimi;
public class BcHideNesting : TsukimiBehaviour{ void Start() { int V = 1; Debug.Log(V); // => 1 }
private int V = 2;}for の変数の範囲
Section titled “for の変数の範囲”using UnityEngine;using Tsukimi;
public class BcForScope : TsukimiBehaviour{ void Start() { for (int i = 0; i < 2; i++) { Debug.Log(i); } for (int i = 0; i < 2; i++) { Debug.Log(i); } }}
// 出力// 0// 1// 0// 1グローバル名前空間の別名
Section titled “グローバル名前空間の別名”using UnityEngine;using Tsukimi;
public class BcGlobalQual : TsukimiBehaviour{ void Start() { Debug.Log(global::System.Int32.MaxValue); // => 2147483647 }}引数の名前の文字列化
Section titled “引数の名前の文字列化”using UnityEngine;using Tsukimi;
public class BcNameofParam : TsukimiBehaviour{ void Start() { Debug.Log(Take(1)); // => "value" }
private string Take(int value) { return nameof(value); }}イベントのエントリポイント
Section titled “イベントのエントリポイント”Main の記述
Section titled “Main の記述”Main は書けますが、実行環境は呼びません。プログラムのエントリポイントは、基底が宣言しているイベントです。
using UnityEngine;using Tsukimi;
public class BcMain : TsukimiBehaviour{ void Start() { Debug.Log(1); // => 1 }
public static void Main() { }}