[C#]クラスインスタンスを宣言するついでに、パラメータとか渡したい

投稿者: | 2019年4月3日

Staticおじさんじゃなかったらよく使う手法

Form1からForm2に値を渡す時に


namespace Project
{
    public class Params
    {
        public String ArgumentsA
        {
            get; set;
        }
    }
}

namespace Project
{
    public partial class Form1 : Form
    {
    (略)
        private void button_Click(object sender, MouseEventArgs e)
        {
            List ParameterLists = new List();
            ParameterLists.add(new Params{ Arguments = A});
            Form2 frm = new Form2(ParameterLists);
            frm.ShowDialog();
        }
    }
}

namespace Project
{
     private List _param;

     public Form2(List vals)
     {
         InitializeComponent();
         //Paramsクラスを取得
         _param = vals;
     }
}

と書ける。

プロパティ経由なら比較的楽に値を渡すことができるので、意外と便利な方法。
ただしpakHelper2019ではJsonクラスのシリアライズ・デシリアライズぐらいにしか今の所は使い道がない。
JsonProxy.csによって部品化され、シリアライズによってjsonになる

JsonProxy.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pakHelper2019
{
    public class JsonProxy
    {
        public bool IsDefinition
        {
            get;set;
        }
        public String name
        {
            get;set;
        }
        public String Val
        {
            get;set;
        }
    }
}

SmallUtil.cs


略
        public static bool CreateJsonString(ref String JsonStrings ,params String[] names)
        {
            try
            {
                var SettingsList = new List();
                SettingsList.Add(new JsonProxy { IsDefinition = true, name = JsonHeaderDefinition._OutputSettings, Val = String.Empty });

                foreach (String temp in names)
                {
                    SettingsList.Add(new JsonProxy { IsDefinition = false, name = temp, Val = Properties.Settings.Default[temp].ToString() });
                }

                JsonStrings = Newtonsoft.Json.JsonConvert.SerializeObject(SettingsList);

                return true;
            }
            catch(Exception Ex)
            {
                Console.WriteLine(Ex);
                return false;
            }
        }
略

pakHelperOption.cs


略
        private void SaveSettings(String FilePath)
        {
            String JsonStrings = "";
            if (SmallUtil.CreateJsonString(ref JsonStrings,
                                        Settingd._Makeobjpath, 
                                        Settingd._Pakpath, 
                                        Settingd._Extractpath, 
                                        Settingd._Mergepath,
                                        Settingd._UseMakeobjSamepath,
                                        Settingd._UsePakSamepath,
                                        Settingd._UseExtractSamepath,
                                        Settingd._UseMergeSamepath))
            {
                if(FSUtil.WriteFiles(FilePath, JsonStrings))
                {
                }
                else
                {
                }
            }
        }
略

Jsonのシリアライズ・デシリアライズは正直にクラスを一個一個宣言して書くよりは、
渡す時点で配列にしてしまった方がめんどくささが減って楽。
楽したいなら設定クラス自体を配列に入れて固定化すればいいけど、
そんな配列をちまちま一つひとつ作るよりもこの方法なら配列の変数に飛ぶ必要もなくていいです。

もちろん、DBから設定を取得した場合は
SmallUtil.CreateJsonString(DBから設定用の値を配列に書き出すstaticメソッド);
に変わる。
その他色々あるかもしれないが、ぶっちゃけ自分のやりたい方法でいいです。


プライベートなコーディングはあれこれこねくり回して考えるものなので、
simutransのソースをいきなり覗くよりはハードルが低いですね。

カテゴリー: C#

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です