public static void Prototype() { Developer dev = new Developer { PreferredLanguage = ".NET", Name = "Uliana", Role = "Junior" }; Console.WriteLine(dev.GetDetails()); // This info is very hard to get( long SQL operation) TechWriter writer = new TechWriter { WordsPerMinute = 156, Name = "Bob", Role = "Trainee" }; Console.WriteLine(writer.GetDetails()); // So for new writer we just copy existing info TechWriter writer2 = (TechWriter)writer.Clone(); writer2.WordsPerMinute = 45; Console.WriteLine(writer2.GetDetails()); Console.WriteLine(writer.GetDetails()); }
/// <summary> /// 技術定義ファイル群を保存する /// </summary> /// <returns>保存に失敗すればfalseを返す</returns> public static bool Save() { // 読み込み途中ならば完了を待つ if (Worker.IsBusy) { WaitLoading(); } if (IsDirty()) { string folderName = Game.GetWriteFileName(Game.TechPathName); try { // 技術定義フォルダがなければ作成する if (!Directory.Exists(folderName)) { Directory.CreateDirectory(folderName); } } catch (Exception) { Log.Error("[Tech] Write error: {0}", folderName); MessageBox.Show($"{Resources.FileWriteError}: {folderName}", Resources.EditorTech, MessageBoxButtons.OKCancel, MessageBoxIcon.Error); return(false); } bool error = false; foreach (TechGroup grp in Groups.Where(grp => grp.IsDirty())) { string fileName = Path.Combine(folderName, FileNames[(int)grp.Category]); try { // 技術定義ファイルを保存する Log.Info("[Tech] Save: {0}", Path.GetFileName(fileName)); TechWriter.Write(grp, fileName); } catch (Exception) { error = true; Log.Error("[Tech] Write error: {0}", fileName); if (MessageBox.Show($"{Resources.FileWriteError}: {fileName}", Resources.EditorTech, MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == DialogResult.Cancel) { return(false); } } } // 保存に失敗していれば戻る if (error) { return(false); } // 編集済みフラグを解除する _dirtyFlag = false; } if (_loaded) { // 文字列定義のみ保存の場合、技術名などの編集済みフラグがクリアされないためここで全クリアする foreach (TechGroup grp in Groups) { grp.ResetDirtyAll(); } } return(true); }