[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part137 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part137 http://mevius.5ch.net/test/read.cgi/tech/1523004019/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
152: デフォルトの名無しさん (ワッチョイ b7e3-9jjH) [sage] 2018/04/23(月) 09:14:18.74 ID:y08K2+qf0 VB6はコントロール配列があったけどなー。.Netの世界にはないからの。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/152
153: デフォルトの名無しさん (ワッチョイ 4ee8-9jjH) [sage] 2018/04/23(月) 12:01:51.66 ID:joGGyVH30 ttps://dobon.net/vb/dotnet/control/findcontrolbyname.html 名前で探せばいいのでは? http://mevius.5ch.net/test/read.cgi/tech/1523004019/153
154: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/23(月) 12:30:43.09 ID:b1ST+81Ba だから配列に突っ込めば済む話を何でわざわざより面倒な方法で解決しようとするのw http://mevius.5ch.net/test/read.cgi/tech/1523004019/154
155: デフォルトの名無しさん (オッペケ Sr3b-ceek) [sage] 2018/04/23(月) 12:34:22.72 ID:HUKatAJtr >>149 いや、単純にファイルから読み込んだ名前で、チェックボックスの文字を変えたいだけです 例えばファイルの中身が 犬,猿,雉だったら?CheckBox1-3の文字をそれぞれ犬、猿、雉にしてCheckBox4-20は「使用不可」にでもするような だから機械的に参照できればよかったのです >>153 これでほぼ解決です、ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1523004019/155
156: デフォルトの名無しさん (オッペケ Sr3b-ceek) [sage] 2018/04/23(月) 12:39:13.94 ID:HUKatAJtr >>154 まあ一言でいうと、わざわざ自分で配列を作らなくても、それを実現する方法はすでに存在するだろうと思ってたのです 配列作ったら「そんなことしなくてもこう書けば一発で参照できるのに」って言われる方法があるんじゃないかと http://mevius.5ch.net/test/read.cgi/tech/1523004019/156
157: デフォルトの名無しさん (ワンミングク MM8a-/Wij) [sage釣] 2018/04/23(月) 12:39:38.75 ID:+9lDlXeaM >>155 その下にインデクサによる説明もあるだろw http://mevius.5ch.net/test/read.cgi/tech/1523004019/157
158: デフォルトの名無しさん (ワッチョイ 9a7f-fvqh) [] 2018/04/23(月) 13:33:10.44 ID:48XgAlPp0 public partial class Form1 : Form { public Form1() { InitializeComponent(); this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Name ).ToArray(); } private CheckBox[] checkBoxes; } http://mevius.5ch.net/test/read.cgi/tech/1523004019/158
159: デフォルトの名無しさん (ワッチョイ 8aeb-8q6u) [sage] 2018/04/23(月) 17:06:56.96 ID:FWk6fNJV0 public class B : private A { } みたいなこと C# じゃ出来ないんだっけ? http://mevius.5ch.net/test/read.cgi/tech/1523004019/159
160: デフォルトの名無しさん (スップ Sd5a-lyLw) [sage] 2018/04/23(月) 17:10:12.77 ID:BY7S8wKYd >>159 継承元をprotectedにすれば継承したクラスからしかアクセスできないようにはできる http://mevius.5ch.net/test/read.cgi/tech/1523004019/160
161: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/23(月) 17:25:36.44 ID:b1ST+81Ba >>159 何言ってるのかわかりませんw http://mevius.5ch.net/test/read.cgi/tech/1523004019/161
162: デフォルトの名無しさん (スップ Sd5a-lyLw) [sage] 2018/04/23(月) 18:05:17.14 ID:BY7S8wKYd そのクラス経由でしかアクセスできないようにしたいってことじゃないの? http://mevius.5ch.net/test/read.cgi/tech/1523004019/162
163: デフォルトの名無しさん (ワントンキン MM8a-Pnzf) [sage] 2018/04/23(月) 18:18:07.68 ID:CCSIsfHWM ゆとりしか居ないのかなぁ C#はprivate継承はサポートしてないよ フィールドに持たせて移譲メソッド書くしかない http://mevius.5ch.net/test/read.cgi/tech/1523004019/163
164: デフォルトの名無しさん (スプッッ Sdba-0snq) [sage] 2018/04/23(月) 18:31:05.83 ID:VMRJeQmYd >>163 ゆとりなんてもうオッサンやでおじいちゃん? http://mevius.5ch.net/test/read.cgi/tech/1523004019/164
165: デフォルトの名無しさん (スップ Sd5a-lyLw) [sage] 2018/04/23(月) 18:38:07.42 ID:BY7S8wKYd これ参考にすればいいのかな http://ufcpp.net/study/csharp/oo_conceal.html protected internal 同一プロジェクト内のクラス内部、または、派生クラスの内部からのみアクセス可能 private protected (C# 7.2 以降)同一プロジェクト内のクラス内部、かつ、派生クラスの内部からのみアクセス可能 こういうこと? http://mevius.5ch.net/test/read.cgi/tech/1523004019/165
166: デフォルトの名無しさん (ワッチョイ b7e3-i2qG) [sage] 2018/04/23(月) 18:52:13.60 ID:Xa6TKCtV0 >>155 それで解決しねーだろ バラっバラにくんじゃね? 俺はてっきりコントロールの 座標でソートして名前付けたいのかと思った http://mevius.5ch.net/test/read.cgi/tech/1523004019/166
167: 135 (ワッチョイ 3bc3-9jjH) [sage] 2018/04/23(月) 21:02:25.52 ID:wp3u/AuE0 皆様いろいろありがとうございました >>158 書いてくださった方法が、ほぼ私が求めていたものを完璧に実現しています 抱かれてもいいくらい惚れました ただ、試してみたところピックアップされる順番は必ずしもコントロールを配置した 順番通りではなく、はっきりした法則性も見いだせませんでした テストプログラムを書いて、インデックスと見た目を一致させるようデザイナで コントロールを並べ替えようかとも思いましたが、後日コントロールを追加した際 悩むことになりそうなのでやめておきました >>153 結局この方法でコントロールを検索し、発見したコントロールをリストに追加するという 方法で対応することにしました >>154 配列に突っ込むにも、コード上に直接 checkBox1 とか checkBox2 とかのリテラルを 埋め込みたくなかったので、検索した上で配列を作ることにしました >>148, 150, 151 実は書いていることがわからないレベルなので、これから勉強します 「作って覚える」は一通りやったので、「独習c#」を紐解いてみます >>166 これで解決しました 158の方法で解決するかと思っていたのですが、やってみたところバラバラの順番でした 皮肉でもなんでもなく、コントロールの座標でソートとか、なぜそういう操作をしたいのだろうと 推測したのか教えていただけると嬉しいです 今後も質問すると思いますので、疑問点がわかりやすい文章を意識する必要があるので http://mevius.5ch.net/test/read.cgi/tech/1523004019/167
168: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/23(月) 21:07:14.52 ID:QriAiZTC0 今日からC#勉強し始めたけど、 結構ネスト深くなる言語っぽいね、これ。こんな… namespace ConsoleApp1 { class Program { static void Main(string[] args) { try { checked { sbyte a = 64; sbyte b = 65; sbyte c = (sbyte)(a + b); } } catch (OverflowException ex) { Console.Write(ex.Message); } } } } http://mevius.5ch.net/test/read.cgi/tech/1523004019/168
169: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/23(月) 21:09:42.34 ID:b1ST+81Ba >>167 いやいやいやcheckBox1 とか checkBox2 とかはリテラルじゃないってw ただの識別子(フィールド名) コードにリテラルを埋め込むというか、コンパイル時に誤りを検出できない (普通の理解では)お行儀の悪いコードになるのはむしろ>>153みたいな方法だってw http://mevius.5ch.net/test/read.cgi/tech/1523004019/169
170: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/23(月) 21:09:53.25 ID:QriAiZTC0 namespaceとかcheckedがブロックなのが何かなぁ… http://mevius.5ch.net/test/read.cgi/tech/1523004019/170
171: デフォルトの名無しさん (ワッチョイ 3bc3-9jjH) [sage] 2018/04/23(月) 21:27:15.55 ID:wp3u/AuE0 >>169 おっと・・・ どうやら根本的なところで間違っていたようです 書いてあるとおりだとすると、質問とレスが噛み合っていない理由がわかりました わざわざ行儀の悪い書き方を探していたのか http://mevius.5ch.net/test/read.cgi/tech/1523004019/171
172: デフォルトの名無しさん (ワッチョイ 9a7f-fvqh) [] 2018/04/23(月) 21:37:46.50 ID:48XgAlPp0 >>167 >>158はOrderBy()でチェックボックスの名前(Name)順にソートしてる。 Nameの代わりに、TabIndexかTagを設定してそれを利用しても良い。 というか、Nameだとチェックボックスが10個以上になるとソートが望むようにならないか。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/172
173: デフォルトの名無しさん (ワッチョイ b7e3-i2qG) [sage] 2018/04/23(月) 21:45:21.31 ID:Xa6TKCtV0 >>167 おそらく配置したコントロールから欲しい情報は座標とサイズぐらいしかない それらの特定情報は別ファイルにある なのでコントロールが上から もしくは左からか順番に取得できれば 別ファイルに記述した通りの順番で情報を並べることができる Controlsで取得できる順番はよく知らないけど 作った順かあるいわなんの特徴もなくランダムか何かを保証するものではないのかな?と http://mevius.5ch.net/test/read.cgi/tech/1523004019/173
174: デフォルトの名無しさん (ワッチョイ 9a7f-fvqh) [sage] 2018/04/23(月) 22:10:47.18 ID:48XgAlPp0 >>173 Controlsが返す順番は保証されてないけど、自分でソートすれば良い。 (1)TabIndex順 (各CheckBoxにタブオーダー(TabIndex)を設定しておく) this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.TabIndex ).ToArray(); (2)Tag順 (各CheckBoxのTagに数値を設定しておく) this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Tag ).ToArray(); (3-1)Location順(左から) this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.X ).ThenBy( x=> x.Location.Y ).ToArray(); (3-2)Location順(上から) this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.Y ).ThenBy( x=> x.Location.X ).ToArray(); http://mevius.5ch.net/test/read.cgi/tech/1523004019/174
175: デフォルトの名無しさん (ワッチョイ 179b-Jtac) [sage] 2018/04/23(月) 22:33:20.75 ID:fnmaDcrK0 >>155 そういう使い方なら、チェックボックスを先に作っておくんじゃなくて ファイルから読んだ内容で動的に作っていった方が手っ取り早い どうせチェックボックスは全部等間隔に並べるんじゃろ? http://mevius.5ch.net/test/read.cgi/tech/1523004019/175
176: デフォルトの名無しさん (ワッチョイ 73d7-TcdZ) [sage] 2018/04/23(月) 22:53:14.98 ID:pYJnxPYX0 WPFのサンプルでありそうな話だ http://mevius.5ch.net/test/read.cgi/tech/1523004019/176
177: デフォルトの名無しさん (アウアウアー Sa06-S9Qq) [sage] 2018/04/23(月) 23:04:57.82 ID:0nhwdYRFa >>126,>>128 >>123です SetPrinter関数を使用することで実現できました。ありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/177
178: デフォルトの名無しさん (ワッチョイ 1781-5Fj3) [sage] 2018/04/24(火) 00:40:53.09 ID:U7B9av/W0 >>168 そのtry意味ないんだけど。。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/178
179: デフォルトの名無しさん (ワッチョイ 239f-xI9k) [sage] 2018/04/24(火) 00:55:02.77 ID:P/LpDfjz0 >>178 ネストのイメージ書きたかっただけだろうよ http://mevius.5ch.net/test/read.cgi/tech/1523004019/179
180: デフォルトの名無しさん (ワッチョイ 3bc3-9jjH) [sage] 2018/04/24(火) 06:02:26.80 ID:PLNFE8AC0 >>173 なるほど、コントロールから情報を取得する必要があると思えたのですね 実際はそれ以前の段階でしたが >>175 それも考えたのですが、デザイナで画面を確認したいので、静的に用意して おきたいという結論になりました 動的に置くほうが難易度高そうだ、と思ったのもありますが http://mevius.5ch.net/test/read.cgi/tech/1523004019/180
181: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 11:44:27.10 ID:MJ0NRymv0 >>178-179 「意味無い」って、どういう意味? http://mevius.5ch.net/test/read.cgi/tech/1523004019/181
182: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 12:45:33.19 ID:MJ0NRymv0 うぇぇ、C#、goto文使えるし… http://mevius.5ch.net/test/read.cgi/tech/1523004019/182
183: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 13:15:16.40 ID:MJ0NRymv0 うーん、string x = "10"; に対して x.toString(); するんじゃなくて、int.Parse(x); するのか…。 xオブジェクトにintegerを吐き出させるのではなく、 integerオブジェクトにxオブジェクトを与えてintegerを吐き出させる…。 これは初めての体験だな…。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/183
184: デフォルトの名無しさん (ワッチョイ 4ec9-9jjH) [sage] 2018/04/24(火) 13:18:45.32 ID:Ajvhvjmq0 何もかも間違っててワロタw http://mevius.5ch.net/test/read.cgi/tech/1523004019/184
185: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 13:34:52.91 ID:MJ0NRymv0 なにゆえ? http://mevius.5ch.net/test/read.cgi/tech/1523004019/185
186: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 13:45:01.31 ID:MJ0NRymv0 expression-bodied関数は、なんかエロいな… http://mevius.5ch.net/test/read.cgi/tech/1523004019/186
187: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 13:46:08.52 ID:MJ0NRymv0 やってる事は違うけど、考え方的にはCのマクロに近いのかな… http://mevius.5ch.net/test/read.cgi/tech/1523004019/187
188: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 13:50:59.68 ID:MJ0NRymv0 LINQ…、エロいな…。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/188
189: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 13:53:53.94 ID:MJ0NRymv0 関数名がアッパーキャメルなのは感心せんなぁ… http://mevius.5ch.net/test/read.cgi/tech/1523004019/189
190: デフォルトの名無しさん (ワッチョイ 17d3-9jjH) [sage] 2018/04/24(火) 14:00:18.73 ID:a0zqzGgA0 ここ質問スレなんで日記は他所でな http://mevius.5ch.net/test/read.cgi/tech/1523004019/190
191: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 14:04:20.23 ID:MJ0NRymv0 なんだよ、ToString()メソッドあるじゃねぇかよ…。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/191
192: デフォルトの名無しさん (ワッチョイ 47c9-8E8L) [] 2018/04/24(火) 14:05:02.22 ID:MJ0NRymv0 >>190 ごめん。 質問です。なんだよ、ToString()メソッドあるじゃねぇかよ… http://mevius.5ch.net/test/read.cgi/tech/1523004019/192
193: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [sage] 2018/04/24(火) 14:39:12.39 ID:5gRbnpaG0 VisualStudioでC#のフォームアプリを開発するときに プロジェクトのプロパティから 出力の種類を「コンソールアプリ」にして デバッグ用のConsole.WriteLineを出力できるようにしてるんだけど リリースするときは、種類を「Windowsアプリ」にするだけで コード中のConsole.WriteLineはコメントアウトとかしなくても 大丈夫ですか? http://mevius.5ch.net/test/read.cgi/tech/1523004019/193
194: デフォルトの名無しさん (ワッチョイ 9a7f-fvqh) [sage] 2018/04/24(火) 15:12:41.47 ID:aRAC41/V0 >>193 デバッグ用に文字列を出したいなら、using System.Diagnostics;して、Debug.WriteLine()とか使うべき。 これならリリースビルドにするだけで無効になるからコメントアウトも不要。 リリースビルドでも使いたいなら、Trace.WriteLine()。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/194
195: デフォルトの名無しさん (ワッチョイ fac3-TcdZ) [sage] 2018/04/24(火) 17:00:53.50 ID:Le/zmSZT0 >>193 パイプで繋ぐとみえちゃうよ http://mevius.5ch.net/test/read.cgi/tech/1523004019/195
196: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [sage] 2018/04/24(火) 17:22:41.52 ID:5gRbnpaG0 >>194 おお、ちゃんとデバッグ用のがあるんだ 聞いてよかった ありがとう >>195 なるほど 別に見られて困るようなものでも無かったけど 無知を晒す所だった・・・ てか、独学でやってると気づかずおかしなことやってそうで怖いわ たまたま、ネット上で解説見つかるか 質問して教えてもらえるかの 綱渡りで進んでるw http://mevius.5ch.net/test/read.cgi/tech/1523004019/196
197: デフォルトの名無しさん (ブーイモ MMff-5Fj3) [sage] 2018/04/24(火) 19:15:00.82 ID:QP8ofl3+M >>192 おまえ出身言語化どこだよw レヴェルが低すぎるぞ http://mevius.5ch.net/test/read.cgi/tech/1523004019/197
198: デフォルトの名無しさん (ワッチョイ 0e8a-xhTL) [sage] 2018/04/24(火) 20:32:35.47 ID:AF96232m0 引数の文字列が、データグリッドに含まれていない場合だけ追加したいんですが、追加されません。 何が原因でしょうか? void AddToDataGrid(string[] strs) { bool exists = false; foreach(string str in strs) { for(int i = 0; i <= view.Rows.Count; i++) { if(str == view[0, i].Value.ToString()) exists = true; } if(!exists) { view.Rows.Add(str); } } } http://mevius.5ch.net/test/read.cgi/tech/1523004019/198
199: デフォルトの名無しさん (ワッチョイ 4ec9-9jjH) [sage] 2018/04/24(火) 20:43:20.78 ID:Ajvhvjmq0 >>198 >view.Rows.Add(str); これじゃね http://mevius.5ch.net/test/read.cgi/tech/1523004019/199
200: デフォルトの名無しさん (ワッチョイ 0e8a-xhTL) [sage] 2018/04/24(火) 20:48:40.81 ID:AF96232m0 >>199 view.Rows.Add(str); だけだと正常に追加されるので、条件判定かループあたりに原因があると思っています。 フラグの位置がおかしいので以下に修正してもダメでした。 void AddToDataGrid(string[] strs) { foreach(string str in strs) { bool exists = false; for(int i = 0; i <= view.Rows.Count; i++) { if(str == view[0, i].Value.ToString()) exists = true; } if(!exists) { view.Rows.Add(str); } } } http://mevius.5ch.net/test/read.cgi/tech/1523004019/200
201: デフォルトの名無しさん (ワッチョイ 3e9f-rSH3) [sage] 2018/04/24(火) 20:53:14.94 ID:ZpST366k0 >>200 exist=trueでブレークポイントを置いてデバッグ実行すればわかるのでは? http://mevius.5ch.net/test/read.cgi/tech/1523004019/201
202: デフォルトの名無しさん (ワッチョイ 1aa6-wlRc) [sage] 2018/04/24(火) 20:54:05.17 ID:UZOTbxqf0 そもそも exists = true; の行に到達してないというオチな気がする http://mevius.5ch.net/test/read.cgi/tech/1523004019/202
203: デフォルトの名無しさん (ワッチョイ 1aa6-wlRc) [sage] 2018/04/24(火) 20:55:27.49 ID:UZOTbxqf0 >>201とかぶってしまった >>201の方が指摘として親切だからそっちだけ読めばいいよ http://mevius.5ch.net/test/read.cgi/tech/1523004019/203
204: デフォルトの名無しさん (ワッチョイ 4e9a-9jjH) [sage] 2018/04/24(火) 21:00:23.35 ID:PfeXTBpB0 >>200 for(int i = 0; i < view.Rows.Count; i++)//Rows.Count以下じゃなく未満 { bool exists = false;//ここに移動 if(str == Convert.ToString(view[0, i].Value))//ToString()だとValueがnullのときエラー http://mevius.5ch.net/test/read.cgi/tech/1523004019/204
205: デフォルトの名無しさん (ワッチョイ 1aa6-wlRc) [sage] 2018/04/24(火) 21:12:02.89 ID:UZOTbxqf0 >>204はとってもそれっぽい で、例外が握りつぶされるような場所でAddToDataGridが使われてるせいで気づけてないとか こういう場合自分はtry{...}catch(Exception exception){throw;}で囲って throwの直前にブレークポイントを置いたりしてるけどもっとうまい方法があったら誰か教えてちょ http://mevius.5ch.net/test/read.cgi/tech/1523004019/205
206: デフォルトの名無しさん (ワッチョイ 1aa6-wlRc) [sage] 2018/04/24(火) 21:26:25.44 ID:UZOTbxqf0 >>204はそれっぽいと言ったけど よく読むと bool exists = false;//ここに移動 の部分は自分には理解できなかった >>204の勘違い? http://mevius.5ch.net/test/read.cgi/tech/1523004019/206
207: デフォルトの名無しさん (ワッチョイ 4ee8-9jjH) [] 2018/04/24(火) 21:31:25.92 ID:zd8+57fN0 全一 FXきた http://mevius.5ch.net/test/read.cgi/tech/1523004019/207
208: デフォルトの名無しさん (ワッチョイ 4e9a-9jjH) [sage] 2018/04/24(火) 21:36:01.31 ID:PfeXTBpB0 >>206 フラグよく見ていないからとりあえず if(str == Convert.ToString(view[0, i].Value)) {exists = true;break} に変更で http://mevius.5ch.net/test/read.cgi/tech/1523004019/208
209: デフォルトの名無しさん (ワッチョイ 0e8a-xhTL) [sage] 2018/04/24(火) 21:38:44.73 ID:AF96232m0 みなさん本当にありがとうございます。 結局原因はわからず仕舞いでしたが、最終的に以下の方法で打開しました。 void AddToDataGrid(string[] strs) { foreach(string str in strs) { bool exists = false; for(int i = 0; i < view.Rows.Count; i++) { if(Convert.ToString(view[0,i].Value) == str) exists = true; } if(!exists) { view.Rows.Add(name); } } } http://mevius.5ch.net/test/read.cgi/tech/1523004019/209
210: デフォルトの名無しさん (ワッチョイ 1aa6-wlRc) [sage] 2018/04/24(火) 21:49:35.82 ID:UZOTbxqf0 >>208 それなら納得 existsの宣言の位置を移動するとif(!exists)がスコープから外れちゃうもんね >>209 >>204の方法で解決したんなら>>204の指摘が正しかったんでしょうよ で、それに気づかなかったんならやっぱり例外が握りつぶされてたんでしょ なら今後のためにも原因は分からずで片付けず例外の名前くらい確認しといたほうが良いと思うよ http://mevius.5ch.net/test/read.cgi/tech/1523004019/210
211: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [] 2018/04/25(水) 15:12:14.28 ID:lzwohvOS0 オブジェクト指向のプログラミングでは 変数じゃなくてプロパティにアクセスさせるべき みたいな事をよく聞くんだけど ・プログラムの開始時にあるフラグ(true/false)を決めて、その後一切変更されることがない ・そのフラグには、コード中の様々な所からアクセスがある って場合は、プロパティじゃなくてpublicな変数でフラグを定義してもいいんですか? オブジェクト指向がよくわかってないせいか プロパティを経由するのがどうしても遠回りというか 一つ余分な作業を挟んでるように感じてしまう・・・ http://mevius.5ch.net/test/read.cgi/tech/1523004019/211
212: デフォルトの名無しさん (ワッチョイ 4e80-c0HJ) [sage] 2018/04/25(水) 15:30:51.28 ID:eqJJBtIM0 変数は、公開しちゃダメ その変数に、誰かが代入するかも知れないと考えると、 その変数に代入しているか、すべての場所を確かめないといけなくなるから、 プログラミングできなくなる だから、プロパティで代入禁止に設定する ただし、絶対に代入できない定数なら、公開してもよい http://mevius.5ch.net/test/read.cgi/tech/1523004019/212
213: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [] 2018/04/25(水) 16:03:36.81 ID:lzwohvOS0 >>212 後から書き換えられるのを確実に防止するために プロパティを使うってことか なるほど 1人でコード書いてるからそういう発想が無かったけど 自分も後から絶対変な値を代入しない保証ないもんな てことは、>>211の例だと ・引数付きのコンストラクタを使って、フラグの状態をインスタンス化 ・そのフラグのプロパティはgetのみ設定 ってすればいいのか? でもこれだと、そういうフラグを立てるタイミングがたくさんあったら その分だけクラスを準備しとくことになると思うんだけど そういうもんなの? http://mevius.5ch.net/test/read.cgi/tech/1523004019/213
214: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [] 2018/04/25(水) 16:12:23.29 ID:lzwohvOS0 あ、いや クラスを複数準備する必要はないな >>213の後半の話は無しで http://mevius.5ch.net/test/read.cgi/tech/1523004019/214
215: デフォルトの名無しさん (ワッチョイ 4bbb-txNp) [sage] 2018/04/25(水) 16:13:38.42 ID:VelEInRI0 >>211 212は読まなくていい フィールドだってreadonly修飾子で代入禁止できるが、212はそんなことも分かってないから プロパティがフィールドと違う点は大ざっぱに * 派生クラスでオーバーライドできる * プロパティから構造体を返すとコピーされる の2点 この2つの特性が必要ない(または避けたい)場合にフィールドを選択してよい 判断できないならプロパティを選択する http://mevius.5ch.net/test/read.cgi/tech/1523004019/215
216: デフォルトの名無しさん (スプッッ Sd5a-0snq) [sage] 2018/04/25(水) 16:15:28.83 ID:ym3YbVtBd IOption使っとけ http://mevius.5ch.net/test/read.cgi/tech/1523004019/216
217: デフォルトの名無しさん (ワッチョイ 1aa6-wlRc) [sage] 2018/04/25(水) 16:51:44.20 ID:I8kFq/qw0 >>211 >>215はどこかのコピペじゃないならすごい分かりやすくて尊敬 一つだけ補足すると、↓のようなこともあるからクラスがpublicの場合は 現状だけでなく将来の変更の可能性も考えてフィールドかプロパティか判断したほうが良い public フィールドをプロパティに変える (2016/05/16追記) https://qiita.com/chocolamint/items/f04665ce2db211abb2d2#public-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%81%AB%E5%A4%89%E3%81%88%E3%82%8B-20160516%E8%BF%BD%E8%A8%98 あと>>212も善意で答えてるのは分かるんだけど 代入できるかどうかだけを判断基準にしてる時点でズレてて 定数の説明も参考にならない気がするから割と真面目に>>212は読まないほうが良いと思う すまぬ>>212 http://mevius.5ch.net/test/read.cgi/tech/1523004019/217
218: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [sage] 2018/04/25(水) 17:43:22.74 ID:lzwohvOS0 >>215 >* プロパティから構造体を返すとコピーされる これが、全然分からんのだけど classの代わりにstructを使った場合の話であってる? 今の自分が考えたところで、どうせちゃんと理解出来ない気もするけど http://mevius.5ch.net/test/read.cgi/tech/1523004019/218
219: デフォルトの名無しさん (ワッチョイ 1a1e-fvqh) [sage] 2018/04/25(水) 17:44:09.08 ID:EO6K8yEq0 >>212は別に全く問題ないだろ。 >>211の要はカプセル化の質問に対して、>>212はカプセル化の話として一般論として答えただけじゃん。 それに対して>>215と>>217はここはC#のスレだからC#特有のreadonlyなフィールドあるよとか言語依存の情報 つけ足してるだけじゃん。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/219
220: 212 (ワッチョイ 4e80-c0HJ) [sage] 2018/04/25(水) 17:48:51.21 ID:eqJJBtIM0 オブジェクト指向では、変数は公開しない。 公開できるのは、処理(関数)だけ クラス内を開発する人と、そのクラスを使う人は、別の会社・人を想定しているから、 変数にアクセスさせたら、絶対にダメ クラス内を作っている開発者は、後で付け加えられる処理を予想できないから。 クラス内を開発した後に、別人が変数にアクセスして、動きを変えたらバグる 異なる会社間での開発を可能にする、 オブジェクト指向の大原則・カプセル化 http://mevius.5ch.net/test/read.cgi/tech/1523004019/220
221: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/25(水) 17:50:35.02 ID:ClmIY1xNa プロパティから構造体を返すとコピーってのは意味わかんないね コピーされるのは右辺がプロパティだろうがフィルドだろうが同じだよw >>211 少なくともパブリックなメンバーに関しては、あえてフィールドを使う理由はないって 理解でいいと思うよ。例外はアンマネージドコードの呼び出しで使う型を定義する場合ぐらい。 フォールドのプロパティーに対して優位な点は (1) 軽量である (2) 簡潔に書ける このぐらいしかない。 (1)が重要なケースなんかまずない。 (2)については、古いC#はともかく今のC#は儒分簡潔に書けるようになって来てる。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/221
222: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/25(水) 17:59:38.62 ID:ClmIY1xNa >>220 カプセル化っていのは、触る必要がないもの、触られては困るものを隠すこと。 この質問にはほとんど関係ない話w フィールドをプロパティにしようが、触る必要がない文脈で触られることを防げるわけじゃないw せいぜいセッターで値が適切かどうかチェックできる程度 http://mevius.5ch.net/test/read.cgi/tech/1523004019/222
223: デフォルトの名無しさん (ワッチョイ 1a1e-fvqh) [sage] 2018/04/25(水) 18:00:19.55 ID:EO6K8yEq0 まぁ、むしろ>>211のカプセル化などの話に対して、考え方説明せずに 初心者にいきなり言語仕様の詳細を羅列する>>215の方が教え方としてははぁーー??だわww http://mevius.5ch.net/test/read.cgi/tech/1523004019/223
224: デフォルトの名無しさん (ワッチョイ 1a1e-fvqh) [sage] 2018/04/25(水) 18:04:12.14 ID:EO6K8yEq0 >>222 質問者は >オブジェクト指向のプログラミングでは >変数じゃなくてプロパティにアクセスさせるべき >みたいな事をよく聞くんだけど で書いて始めてんじゃん。だから、カプセル化の説明した方がまずいいんじゃねぇか?? http://mevius.5ch.net/test/read.cgi/tech/1523004019/224
225: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/25(水) 18:09:53.61 ID:ClmIY1xNa >>224 何が「だから」なのかよくわかりませんw 質問は外部に見せるデータをプロパティとして実装すべきかフィールドでもよいのか。 カプセル化(余分なものを外に見せるな)は何も関係ないってw http://mevius.5ch.net/test/read.cgi/tech/1523004019/225
226: デフォルトの名無しさん (ワッチョイ 1a1e-fvqh) [sage] 2018/04/25(水) 18:14:14.76 ID:EO6K8yEq0 >>224 >オブジェクト指向のプログラミングでは >変数じゃなくてプロパティにアクセスさせるべき >みたいな事をよく聞くんだけど を質問者が引き合いに出した以上、質問者はここからはしっかりわかってなくて、色々ごちゃ混ぜになってると 思われる。だから、そっから説明しなきゃ、おそらく習得できない。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/226
227: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [sage] 2018/04/25(水) 18:17:11.69 ID:lzwohvOS0 自分はオブジェクト指向じゃない言語をちょっとだけやってたんだけど そういう言語では、コードの最初の方に public bool JudgFlag = true って1行書いて、それにどこからでもアクセスするみたいな感じだと思うんだ (全部独学だからこれも正解なのか知らんけど) でも、オブジェクト指向ではこれやったらダメなんだよね? ってのが知りたい 後、俺マジで初心者だから 質問文で聞きたいことが正確に表現できてる保証ないwすまん http://mevius.5ch.net/test/read.cgi/tech/1523004019/227
228: デフォルトの名無しさん (ワッチョイ 1a1e-fvqh) [sage] 2018/04/25(水) 18:20:06.19 ID:EO6K8yEq0 >>225だった・・ http://mevius.5ch.net/test/read.cgi/tech/1523004019/228
229: デフォルトの名無しさん (アウアウエー Sa52-PKj8) [sage] 2018/04/25(水) 18:22:03.13 ID:ClmIY1xNa >>227 別にダメじゃないよw 何度も言うけど、あえてフィールドを使う理由があんまりないだけw フィールドをプロパティにしたらバグが減らせるとか可読性が上がるとか、 ほとんどの場合そんなことはない http://mevius.5ch.net/test/read.cgi/tech/1523004019/229
230: 212 (ワッチョイ 4e80-c0HJ) [sage] 2018/04/25(水) 18:26:03.04 ID:eqJJBtIM0 >変数じゃなくてプロパティにアクセスさせるべき これが異なる会社間での開発を可能にする、 オブジェクト指向の大原則・カプセル化 どの教科書にも書いてある その理由は、クラス内を開発している会社・人と、 そのクラスを使う会社・人は、異なっているから オブジェクト指向では、これらの2つの立場からの見方が大切。 君はどちらの開発者ですか? クラスを作る方・使う方? クラス内を開発しているのは、過去だから、 そこから未来の、クラスを使う人の動きを予測できない だから、変数に直接触らせたらダメ。 そこまで予測して、クラス内を作れないから http://mevius.5ch.net/test/read.cgi/tech/1523004019/230
231: デフォルトの名無しさん (ワッチョイ 9a98-9jjH) [sage] 2018/04/25(水) 18:31:21.63 ID:lzwohvOS0 >>229 そうなのか・・・ でも、解説サイト見てると 「ダメ」的な雰囲気で書いてあるとこばっかりじゃない? 俺の理解が間違ってるのかもしれないが 俺的には現状>>229に書いてある事が正解に思えちゃうんだよな 俺が1人で小規模な開発してるだけだから いまいちオブジェクト指向のメリットを感じる場面が少ないのかな http://mevius.5ch.net/test/read.cgi/tech/1523004019/231
232: 212 (ワッチョイ 4e80-c0HJ) [sage] 2018/04/25(水) 18:31:24.51 ID:eqJJBtIM0 >>227 >public bool JudgFlag = true 変数を公開したら、ダメ。 カプセル化にならない 理由は、 >>212 に書いてある http://mevius.5ch.net/test/read.cgi/tech/1523004019/232
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 770 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s