こんにちは栞です。
フェチを表現するための手段として
Unity触ってます。
前回のタンクゲームの課題が終わり、
現在はアイテムリストの作成をしています。
その前座として、タイトルにもある通り
そのクラスに無い関数を呼び出す方法を5つ
解説動画を通して学びました。
10数分の動画だったのですが
ちゃんと視聴して
自分でプロジェクトを再現してたら
一日が終わってました。
いつもこうやってノートを残してるんですが
若干オーバーワークなんでしょうか?
でもこうでもしないと忘れそうなんですよねー…
丸々文章写すとかだったら意味ないんですけど、
自分がそのとき抱いた「は?」を言語化したり
図式化したりしたコンテンツが結局
一番自分の身を助けてくれる気がするんですよ
ということで
そのクラスに無い関数を呼び出す方法×5
です
間違っていたら指摘を頂けるとよろこびます。
以前コメントのなかにあった
シングルトンがようやく出てきました。
ローカル関数のわかりやすい解説https://atmarkit.itmedia.co.jp/ait/articles/1804/04/news014.html
【9/9 追記】
こうしなくても、
【09/08 訂正】
staticフィールドが属しているクラスのインスタンスを
通してアクセスしようとしたところコンパイルエラーを吐いた。
「インスタンスを通さずアクセス可能」ではなく
「インスタンスを通してアクセスできない」が正しいようだ。
設計理念からもそれが自然な挙動だとわたしも思う
static…なかなか骨の折れる概念でした。
でも「静的なメモリを確保する」が挙動の中核になっていることを
想像すればなんとなくつかめてくる
それではまた。
Unityはじめてみた 26日目 アイテムリストの制作でつまずいたところまとめ
風来のシレンっぽいアイテムウィンドウを作ろうと思ったのですがまだ「アイテムを選択したらそこにカーソルが合う」までしか実装できてない状態… 「アイテムを選択した...
コメント
コメント一覧 (4件)
シングルトンを設計する場合、さらにコンストラクタをprivateにしておきInstance()以外のよそのクラスの中で管理外のStaticSetClassインスタンスを作成されてしまうことを防止することも多いですね。
コンストラクタを明示的に定義しない場合、
コンパイラは自動的にそのクラスのpublicなコンストラクタを生成する
↓
今回のコードではStaticSetClassコンストラクタを定義していないので
publicに呼び出せるようになっている
↓
他クラスにてnew StaticSetClass();で呼び出せてしまう
↓
これでは保守性が低くなり、
シングルトンの設計思想から外れる
↓
だからシングルトンクラスは常に
コンストラクタをprivateで宣言しておくべき
ということでしょうか?
>シングルトンクラスは常に
コンストラクタをprivateで宣言しておくべき
そうですね、常にと言い切ってもいいかもしれません。コンストラクタはショートカットで簡単に自動生成できますし
new StaticSetClass()を呼べないようにするのは、保守性を高めるというよりは、間違った使い方ができないようにする目的が大きいですね。間違った使い方をコードレビューで見つけるのは大変なので、new StaticSetClass()はクラス外部から呼べませんよとコンパイラがあらかじめ拒否してくれるようにしたいということになります(一度決めたら変えてほしくないフィールドのsetterを作らないでおくのと同じです)
OKです!補足説明ありがとうございました