X



ふらっと C#,C♯,C#(初心者用) Part137
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ドコグロ MM07-2FKJ)
垢版 |
2018/04/06(金) 17:40:19.48ID:oKXVP34zM
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part136
http://mevius.5ch.net/test/read.cgi/tech/1520057345/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0599デフォルトの名無しさん (ワッチョイ cbe8-k37M)
垢版 |
2018/05/13(日) 23:38:24.99ID:PSHb3apy0
PCのiTunesって曲の情報管理全部XMLだよな
どうにかならんのか
https://i.imgur.com/zaooQAM.jpg
0600デフォルトの名無しさん (ワッチョイ 3d9e-pJrV)
垢版 |
2018/05/13(日) 23:40:15.36ID:u4TQvgwd0
Ant, Maven とか、Java系は、XML。
Android 画面の設定ファイルとか

Windows でも、XAML で画面設定する

プロジェクトの設定ファイルも

JSON を設定ファイルに使うのは、JavaScript を使ったもの。
例えば、Node.js を含んだ、VS Code

他には、プログラミング言語自体が設定ファイルになるもの。
Ruby, Groovy, Haxe
0606デフォルトの名無しさん (アウアウエー Sa13-5wbU)
垢版 |
2018/05/14(月) 00:17:32.79ID:gDWY5JTja
川俣さんのことを馬鹿にする人が2chには多いけど、この記事の趣旨は正しいと思う
http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_18/extremecs_18_02.html

特定の技術への信仰と「俺スゲー」っていう間抜けな自己陶酔が結びついてる奴ってよくいるし、
このスレにも時々そんなのが出るけど、そういう奴のいうことは真に受けない方がいいですw
0608デフォルトの名無しさん (ワッチョイ 4b9f-ZOQu)
垢版 |
2018/05/14(月) 07:03:43.68ID:oC/RgBRx0
つか業務で使うなら余程のことがない限り枯れた技術の方が安定する
0610デフォルトの名無しさん (ブーイモ MM49-27Jw)
垢版 |
2018/05/14(月) 07:55:56.39ID:zbYXMED5M
COBOLは実際優れてるんだよなあ
低品質なPGでもほぼ完璧に見積工数通りに仕上がるし、バグもほとんど出ない
金持ちな客からきっちり工数見合いで金取れるならSIerにとってこれほど好都合な言語はない
0611デフォルトの名無しさん (オッペケ Sr21-XDJ1)
垢版 |
2018/05/14(月) 08:01:56.16ID:wRU00x5/r
バグでないのはアカンやろw
0612デフォルトの名無しさん (アウアウカー Sa11-ZOQu)
垢版 |
2018/05/14(月) 08:12:24.86ID:I+nT90nna
それはバグが摘出できていないだけでは
0617デフォルトの名無しさん (アウアウカー Sa11-+fqb)
垢版 |
2018/05/14(月) 19:19:28.87ID:M+KhV3wka
>>594だけど
蒸し返した話にレスくれてありがとう
自分の用途にはxmlでも問題なさそうでとりあえず安心した
0618デフォルトの名無しさん (ワッチョイ e327-0Spf)
垢版 |
2018/05/14(月) 20:12:46.13ID:CBd8Qc4H0
SVGやMathMLのような外部の名前区間が出てくるとか、Xamlのようにかっちりしたものを書きたい場合はXMLが有利
文字列や数値しか出てこないような簡単な構造ならJSONの方が便利なことも多い。
Trueなのかtrueなのかとか考えなくても良くて、エディタがサポートしてくれるし、エスケープの仕様とかがシンプルで、ファイルも小さい。逆に言うとその程度なのでわざわざ切り替えるほどでもないとは思う
0619デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/14(月) 20:37:51.15ID:5czuzhWO0
>>593
VCわけないんですか。
うーん・・・。
いろいろな設計方法があるということですね。

インスタンスの生成順として
A→B
A→C
とAからCにBのインスタンスを渡す方法は分かるのですが、

C→A
A→B
とインスタンスを生成した時、CにBのインスタンスを返すことって可能なのでしょうか?
0620デフォルトの名無しさん (アウアウカー Sa11-ZOQu)
垢版 |
2018/05/14(月) 20:54:23.97ID:g5WxNsfna
デリゲート
0622デフォルトの名無しさん (ワッチョイ c5eb-uwJI)
垢版 |
2018/05/14(月) 21:00:16.16ID:qPzo5Sk00
>>619
「返す」ことにこだわりがあるのなら結構難しい
そこにこだわらず、単にCからbを扱えれば良いのならa.bでアクセス可能だろう
0625デフォルトの名無しさん (ワッチョイ 059a-k37M)
垢版 |
2018/05/14(月) 21:40:59.32ID:orCVIDzn0
>>622
まず「返す」の意味が分からないんだよな
>>619
何のためにその実装が必要なのか、まずはそっちから
普通は複数の派生インスタンス扱いたいのならどこかでまとめて管理する方が楽
横に伸ばしていくんじゃなく中心から引っ張っていく形
0627デフォルトの名無しさん (ブーイモ MM19-27Jw)
垢版 |
2018/05/14(月) 23:19:52.93ID:6thsxJoDM
>>619
今時のマルチレイヤな設計ってのは、「汚い場所」をどこかに決めて、そこが依存関係の解決を一手に引き受けるようにするんだよ
で、他の部分は「汚い場所」に直接依存しないようにするの
>>623の例でいうと、Cを「汚い場所」とするならAがCを直接参照するのは良くなくて、
AからCのメソッドをコールバックしたいんだったらインターフェイスを介して呼ぶようにしたりする
汚い場所をどこにするかだけど、フォームアプリならフォームだったり、Webアプリならコントローラだったり
処理の起点となり、かつ、どのみち単体テストが困難な場所を選ぶのが一般的だ
0632デフォルトの名無しさん (ワッチョイ 039d-uCqk)
垢版 |
2018/05/15(火) 06:26:55.76ID:bIQIvbQJ0
MVVMを理解するには何からはじめたらいいの?
0634デフォルトの名無しさん (ワッチョイ 039d-uCqk)
垢版 |
2018/05/15(火) 07:32:22.06ID:bIQIvbQJ0
やってみたけど難し過ぎて手に負えなかったってことだね。
0635デフォルトの名無しさん (ブーイモ MM19-27Jw)
垢版 |
2018/05/15(火) 07:36:31.19ID:IL2LN/1vM
>>632
Vue.jsあたりかな
XAMLはテンプレートやコマンドバインディングが複雑すぎて本質を掴みづらい
WebのMVVM系フレームワークのほうがずっと見通しが良くてMVVMの本質を素直に実装してる
0638デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 07:52:16.57ID:WESx87C+0
>>625
ご指摘を受けてメインのフォーム上でインスタンス管理しようとしているのですが、
アクセシビリティの一貫性というエラーが出てきています。

public partial class ExaminationForm : Form
{
public InitialSettingForm initialSettingForm;
public InitialValues initialValues;

で最後の行にアクセシビリティ一貫性のエラーが・・・。
3行目のpublicをinternalにするとエラー消えるのですがなんでだろう。
0639デフォルトの名無しさん (ワンミングク MMa3-2hZ9)
垢版 |
2018/05/15(火) 07:56:03.82ID:jP3S3vDhM
そのビューの入出力項目と隠し項目とユースケースを抽出するだけだよ

ログイン画面だったら
入出力項目として
・ユーザーid
・パスワード
隠し項目は無し
ユースケースは
・ログインする

なので
class LoginViewModel {
public string UserId { get; set; }
public string Password { get; set; }
public void Login() {
// login impl
}
}
こうなる

あとはViewがVMを監視するために変更通知イベントなどを実装しましょう
それだけ
0641デフォルトの名無しさん (アウアウウー Sa89-27Jw)
垢版 |
2018/05/15(火) 07:59:13.31ID:4jNLOtgZa
>>638
InitialValuesクラスがinternalなんだろ
publicに変えれば意図通りになる
言っちゃ悪いけど正しい設計とか気にするレベルじゃないと思うよ
まずは汚くてもいいから一本何か形にできるようになってから考えればいい
0642デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 08:38:53.30ID:WESx87C+0
>>641
ああああああああ!
そこなのかあああ!

classってデフォルトでinternalになるんですね。
というかinternalって省略されるから気づきませんでした。
ここで半日費やしてたのでものすごく助かりました。
ありがとうございます。m(__)m
0643デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 08:42:40.68ID:WESx87C+0
>>641
一本ゲーム作ったんですが、form1(初期値)、form2(ゲーム)にほとんどぶっこんだオブジェクト指向ほぼ無視プログラムになってしまったので、
ゲーム内のデータ管理とform2だけでも分離しようとして悪戦苦闘しています。

はるか昔にBasicやったぐらいなので、インスタンスの参照渡しとかその辺がうまく実装できなくて・・・。
勉強用に買った本にもインスタンスの参照渡しなんて全く書いてないし・・・。(´・ω・`)
0644デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 08:47:43.78ID:WESx87C+0
あれでも

//インスタンス生成
InitialValues initialValues = new InitialValues(); 
//インスタンスの参照渡し
initialSettingForm.InitialValuesPointer = initialValues;

としているのに

フィールド”InitialValues"は割り当てらせません。常に規定値nullを返します。

となります。
実際にnull値が入ってるようで、initialSettingFormにインスタンスの参照は渡せていない模様・・・。
newしてるのになんで割り当てられませんと出るのでしょう??
0649デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 10:47:12.03ID:WESx87C+0
アホな質問ですが、
Class InitialValue
に初期値を全部詰め込み、必要であればコントローラから参照しているのですが、
インスタンスの参照をinitialValueとすると
initialValue.StartPointX+hoge
などインスタンスの参照がくどくて読みづらい。
いっそiVとかしたいのですが、自分にしかわからない省略は良くないと聞いたもので・・・。

initialValue.StartPointX
initValue.StartPointX
iV.StartPointX

どれが読みやすいコードでしょうか?
0651デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 13:05:19.58ID:WESx87C+0
>>650
えええ!

データはデータクラスで一元管理じゃないんですか?
そうしないとフォームなどからデータクラスを変更した時に、
コントロールクラス側でその通知を受け取って
もう一度データクラスからコントロールクラスにコピーする仕組みが必要になってきますよね。
0653デフォルトの名無しさん (ワッチョイ cba5-A5aB)
垢版 |
2018/05/15(火) 14:32:03.09ID:bP9crr2Q0
勉強のためにプロが書いた大きなプログラムを見たんだが
変数が全部4桁英数字でランダムに発生させてるような文字列だった
僕ら初心者には「これ何の変数だっけ?」と分かりにくいだけなんだけど
大きなプログラムだと万が一、変数がダブったりするのを避けるためにそうするんですかね?
変数一覧表かなにか作るんですか?
0654デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/15(火) 14:38:53.82ID:WESx87C+0
>>652
いや、最初はコピーする仕様だったんですが、
データクラスで一元管理をするアドバイスを受けて変えたところです。

コピーするんなら元の仕様のままでよかったのかということに。
0657デフォルトの名無しさん (ワッチョイ 2da5-A5aB)
垢版 |
2018/05/15(火) 17:20:29.21ID:nA4SMkbe0
>>655
そうか、公開用にリファクターしたのかな
いちいち一覧表見ないと何処につながってるか見えないなんて不便だもんね
0658デフォルトの名無しさん (アウアウエー Sa13-5wbU)
垢版 |
2018/05/15(火) 18:44:33.69ID:Fj6Vms3Xa
>>654
変数名が妥当かどうか聞いてるんじゃなかったの?w

そのInitialValueとやらのクラスを使う実装方法が妥当かどうかは実現すべき仕様を誰も知らないので
誰にも分からないと思うよw

ローカル変数の命名に関しては、型名InitialValueをそのまま変数名にしても
何をやってるのか理解できるような文脈なら変数名をivにしても同じことでしょう。
だったら短い方がいい。

ただしローカル変数でも説明的な名前の方が適切な場合もあるので馬鹿の一つ覚えはダメ。
情況に応じて柔軟に
0660デフォルトの名無しさん (ワッチョイ 23ea-Ca5/)
垢版 |
2018/05/16(水) 10:08:34.12ID:5p+fPd0U0
int[] intData = new int[10];
int intThread = -3; // 閾値
int intCount = 0;
for (int i = 0; i < intData.Length; i++)
{
if (intThread >= 0)
{
if (intData[i] > intThread)
{
// 処理
intCount++;
}
}
else if (intThread < 0)
{
if (intData[i] < intThread)
{
// 処理
intCount++;
}
}
}

閾値がプラスとマイナスで条件式を変えたいんだけど、
中の処理が一回で済む書き方ってあります?
0663デフォルトの名無しさん (アウアウエー Sa13-5wbU)
垢版 |
2018/05/16(水) 11:47:06.88ID:B7aMvtuba
>>660
単に同じ処理を2回書く無駄をなくしたいだけなら&&と||を使って
条件式をまとめるだけ

if((threshold >= 0 && x > threshold) || (threshold < 0 && x < threshold))
{
  ....
}

値が不変のはずのthresholdの符号をループで毎回評価する無駄が許せないなら
Func<int, bool> predicate = x => x > threshold;
if (threshold < 0) predicate = x => x < thredhold;
....
if (predicate(x))
{
  ....
}
0664デフォルトの名無しさん (アウアウカー Sa11-+fqb)
垢版 |
2018/05/16(水) 12:22:33.98ID:CHLBL3ILa
async/awaitって呼び出しのネストが深くなると、大元の呼び出しで波線が立ってすごくもどかしいんですが、気にしなくていいでしょうか?それとも呼び出しのやり方を見直したほうがいいのでしょうか
0666デフォルトの名無しさん (ブーイモ MM19-9jLD)
垢版 |
2018/05/16(水) 13:23:25.14ID:v6bC0eDAM
>>660
カウントをCountメソッドにして引数に突っ込むラムダ式を閾値によって切り替える
0670デフォルトの名無しさん (ワッチョイ 1a61-XGZI)
垢版 |
2018/05/17(木) 00:16:57.84ID:OeNqnCBl0
すいません。ちょっと教えてください。

//Form1にて
Form2 f = new Form2();
f.show();
this.visible=false;

としてForm2を開いて、Form1を非表示にします。
//Form2にて
Form1 f = new Form1();
f.visible=true;
this.visible=false;

としてForm1に戻った場合、先程form1で入力した内容が消えてしまいます。
form1の内容を消さずにform2からform1に戻る方法を教えてください。
0671デフォルトの名無しさん (ワッチョイ 769a-NEzo)
垢版 |
2018/05/17(木) 00:28:09.71ID:yjgdFlmp0
>>670
Form1 f = 「new」 Form1();
新しいForm1を作ったんだから前のはVisible=false;のままで表示されていない
例えばこうする
//Form1にて
Form2 f = new Form2(this);//Form2のコンストラクタの引数にForm1の参照を渡す
f.show();
this.visible=false;
//Form2にて
private Form1 form1;
//コンストラクタ
public Form2(Form1 f)
{
InitializeComponent();
form1=f;
}
//戻る処理
form1.Visible=true;
this.Visible=false;
0673デフォルトの名無しさん (ワッチョイ 1a61-XGZI)
垢版 |
2018/05/17(木) 00:41:03.31ID:OeNqnCBl0
ありがとうございました。
大変助かりました。
0675デフォルトの名無しさん (ワッチョイ 7696-NEzo)
垢版 |
2018/05/17(木) 21:40:59.40ID:Kw1Q24F60
class Program
{
TargetOpe targetOpe = new TargetOpe();
static void Main(string[] args)
{
Target [] target= targetOpe.InitializeTarget();
Console.WriteLine(target[1].x);
}
}

Target [] target= targetOpe.InitializeTarget();の行のtargeOpeで
静的でないフィールド、メソッド、またはプロパティ 'Program.targetOpe' で、オブジェクト参照が必要です
のエラーがでます。
newしてるのになんででしょう?
0677デフォルトの名無しさん (ワッチョイ 5ad2-HRP5)
垢版 |
2018/05/17(木) 23:37:38.13ID:03oIkg7y0
C#初心者です。
ある変数のその時々の値によって呼ぶメソッドを変えたいため初歩的にifやswitchで分岐させていたのですが、毎回分岐させるのもどうかと思い変数が変わるタイミングでデリゲートに代入して呼び出す方法を試してみました。
しかしながらパフォーマンステストを行ったところ、10程度の条件分岐であればifでメソッド呼び出し >>> デリゲートで呼び出しという結果でした。
速度を重視しつつ動的に呼び出すメソッドを変えるという場合はデリゲートではなく毎回条件分岐を行ったほうが良いということなのでしょうか?
0681デフォルトの名無しさん (ワッチョイ 75eb-KqYp)
垢版 |
2018/05/18(金) 01:57:49.78ID:3OrmdyFD0
パフォーマンスは重要だよ
だけど、そんなのを語る以前に、コンピュータの仕組みについての素養を極端に欠く人が多すぎるんだよ
最近のC#入門書はよく出来ていて、大抵の本が最低限の仕組みが知識が身につくようページを割いて解説してるわけだけど・・・・分かっていない人ほど読み飛ばすんだな
その結果、コンピュータの仕組みからしたらとてもありえないことを言い出す高卒様が出来上がるんだ
0682デフォルトの名無しさん (ワッチョイ aa9d-zw5z)
垢版 |
2018/05/18(金) 02:22:20.29ID:tl8rJsN/0
>その結果、コンピュータの仕組みからしたらとてもありえないことを言い出す高卒様が出来上がるんだ

ありえないことなんてないだろ。頭硬すぎじゃねーの。「コンピュータはこうあるべきだ」とかに縛られてると新しい発想のソフトが生まれない。
0683デフォルトの名無しさん (ワッチョイ 75eb-KqYp)
垢版 |
2018/05/18(金) 02:48:57.75ID:3OrmdyFD0
新しいものができたってのならいいけど、言うこと為すこと高卒様じゃあ・・・・
0684デフォルトの名無しさん (ワッチョイ fa27-ZkFG)
垢版 |
2018/05/18(金) 03:11:25.94ID:eSpLSQVO0
>>677
条件次第なのでなんとも言えない
インライン展開とかCPUのキャッシュとかまで関わってくる可能性がある

気にしなければいけないほどパフォーマンスを気遣うなら、JITの結果を比較したほうがいいけど、多くはそこまでするほどではない
0687デフォルトの名無しさん (ワッチョイ 5ae3-+Nwo)
垢版 |
2018/05/18(金) 07:25:31.73ID:40IvU0mB0
デリゲートとラムダ式ってちゃうの?
0689デフォルトの名無しさん (ワッチョイ 7696-NEzo)
垢版 |
2018/05/18(金) 08:01:25.12ID:mGKF1mXv0
public class TargetOperation
{
Target[] target = new Target[Constants.MaximumNumberOfTarget];

public Target[] InitializeTarget()
{
for (int i = 0; i < Constants.MaximumNumberOfTarget; i++)
{
target[i] = new Target();
target[i].x = 100;
}
}
return target;
}
0690デフォルトの名無しさん (ワッチョイ 7696-NEzo)
垢版 |
2018/05/18(金) 08:05:21.79ID:mGKF1mXv0
最後の行で
クラス、構造体、またはインターフェイス メンバーの宣言でトークン 'return' が無効です。
です。
またアホなことをしてそうな気がしますが、昨夜からわからず・・・。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況