ファイル構成と名前空間
対応(18)
Section titled “対応(18)”| 書き方 | 説明 | 注意 |
|---|---|---|
struct NsHelper { ... } | 同じファイルの補助の型 | 同居できないのは、2 つめの具象の Behaviour だけです。 |
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 種すべて書けます |
| LINQ | イテレータやデリゲートの有無ではなく、名前空間が無いこととしてエラーになります。using System.Linq; の 1 行だけで CS0234 が出て、コンパイラは System.Linq が見つからないと言います |
Main | 書けますが呼ばれません。エントリポイントは基底が宣言しているイベントで(イベント)、実行環境がそれを呼び出します |
ファイルの中身
Section titled “ファイルの中身”同じファイルの補助の型
Section titled “同じファイルの補助の型”struct / record / enum / インタフェース / 静的クラスは、同じファイルに同居できます。
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)); // => 1 }}using Tsukimi;
public class NsQualified : TsukimiBehaviour{ void Start() { UnityEngine.Debug.Log(UnityEngine.Mathf.Abs(-1f)); // => 1 }}アクセス範囲
Section titled “アクセス範囲”どこからでも参照できる範囲
Section titled “どこからでも参照できる範囲”public を付けたフィールドはInspector に出ます(属性)。
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() { }}