MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

Unity::UniRx自分用メモ:C#のご当地仕様?!ReactiveProperty, ジェネリック, MVVM,プロパティ,アクセサーなど

f:id:k_mawa:20180405143952j:plain

コメント

ReactivePropertyのあたりを調べていて、いろいろ謎だったことが分かったと思うのでメモに残す。聞いたことある単語が最初の3行くらいに凝縮されていたことが判明・・・ C#、奥が深い・・・

参考資料

資料1:これを主に起点として、いろいろ試行錯誤。重要資料です。 qiita.com

資料2:ReactivePropertyの解説で役立ちました blog.okazuki.jp

資料3:private=>publicの流れプロパティ,set,getの理解に役立ちました ufcpp.net

資料4:ReactivePropertyとは何ぞやの基礎中の基礎の解説 ccs-tech-blog.blogspot.jp

コードのこの部分のメモ。

参考資料1からの引用

    private ReactiveProperty<int> _countReactiveProperty = new ReactiveProperty<int>(0);

    // イベントを購読できるようにする.
    public ReactiveProperty<int> CountReactiveProperty
    {
        get { return _countReactiveProperty; }
    }

これでいつでもSubscribeできるオブジェクトができたみたいなんだけどね。これより先は、UniRxの既存のフィルターみたいなメソッドをつなげていけば直感的にわかりやすいコード構成なので省く。この3行はどういうことなのかしら・・・

疑問

整理すると3点くらいかな

1:ReactiveProperty<int>ってなに??ReactiveProperty<string>とか似て非なるコードもあるのだけども・・・
2:privateで宣言してからpublicで改めて呼んでるのはこれはなに?
3:get...てなに??setってメソッドのようなものもくっついているコード例もあってどういうこと??

疑問1「:ReactiveProperty<int>ってなに??ReactiveProperty<string>とか似て非なるコードもあるのだけども・・・ 」の自分なりの解答

この資料によると、 ccs-tech-blog.blogspot.jp

ReactivePropertyは値が変化したら信号を出すイメージのオブジェクトというざっくりとした理解でとりあえず動かす目的ならOKぽい。

ReactiveProperty<int>ReactiveProperty<string>をまとめてReactiveProperty<T>と呼んでいて、このTはTypeの略らしい。そして、このTをジェネリックと呼ぶらしい。要するに、int,stringとデータ型が変わっても同じ処理をするオブジェクトにはこのジェネリックという概念を適用するということのようだ。

ちなみにReactivePropertyはどうもASP.NETPHPフレームワークMVCや、DjangoのMVTのような規格のMVVM(Model(DjangoでいうModel)-ModelView(DjangoでいうView)-View(DjangoでいうTemplate))を支援するためにつくられた規格の模様。この辺はASP.NETは直接いじったことないからわからないから単なる予想。

疑問2「privateで宣言してからpublicで改めて呼んでるのはこれはなに?」と疑問3「get...てなに??setってメソッドのようなものもくっついているコード例もあってどういうこと??」の自分なりの解答

まとめて解答できる。参考資料2でも同じような個所がある

        private string _input;

        public string Input
        {
            get => _input;

この資料により分かった。 ufcpp.net

つまり安全設計のためであった。おおもとの変数は、privateで隠す→publicで使うごとに呼び出す、そのときに値を設定するためにget,値を変更するためにsetというメソッド(アクセサー。値にアクセスするからだろう)のようなものを使いget,setをアクセサーと呼ぶらしい。なるほど。アクセサーはクラスからオブジェクトを作る際(つまり初期化時)に変数だけちょこちょこいじりたいときに使うよう。

成果