ふらっと C#,C♯,C#(初心者用) Part135
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part134 http://mevius.5ch.net/test/read.cgi/tech/1511951038/ ■関連スレ 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/ ■コードを貼る場合は↓を使いましょう。 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: default:vvvvv:1000:512:----: EXT was configured >foreachで取ってきた要素はIEnumerator.Currentなので読み取り専用になる 参照型もIenumerator.Currentなのか? なぜ読み取り専用でもライトできるのか? ここでクダ巻いてないで勉強したらいいのに 自分より出来る人に突っかかってもいいことないのに わかった ぐちぐちはやめよう >>263 >>264 この2つともListの中身は変わっていないと言うことはわかるかな? 読み取り専用の参照型の変数は参照は書き換えられないが、その参照を得ればそれが指し示す実体を読み書きできる Listは中に追加された値を保存してる intとかの値型はその値自身を持ってる クラスとかの参照型は対象になるクラスへの参照が入ってる そのListの中にある参照先自体は変わってない >>273 残念だけどその内容になるほどというとドツボにはまる classじゃなくてstructにするとフィールドまで書き換えできないと気づく フィールドに波及しないと言うのは誤った理解 こんなところで怪しい回答に頼るより しっかりした実績のある入門書に頼ったほうがいいよ マジで 誰だってその時々で間違うし 本の時代は終わったなんていう奴がいるけど webだけじゃ網羅的に勉強しづらい いいじゃん誤った理解で 馬鹿は痛い目みないと治らないから ぜひ痛い目みて貰おうぜ foreach (var dt in idata) { dt = dt < min ? min : max < dt ? max : dt; } みたいなことができない。これはよくあるケースなので不便。 >しっかりした実績のある入門書に頼ったほうがいいよ 最近2冊ほど読んだけど、細かいところはやってみないとわからないよ。読んだだけでは無理。 なれが必要だ。で慣れるためにコードを書く。しかしサッパリ動かない。w //パラメータをシングルトンで持たせたいのだが、Jsonで格納しようとするとstaticにできない。なので referenceを返したいのだが、何かいい方法はない? class Singleton { private Singleton(){} public static Singleton getInstace() { return SingletonHolder.INSTANCE; } private static class SingletonHolder { public static Singleton INSTANCE = new Singleton(); } } たとえば教科書にあるシングルトン。これに class clsGrovalParam { public int value1; public int value2; public int value3; } public clsGrovalParam Param; とやってParamを追加していたが、なんか動作がおかしい。W と思ったらPublicにしていたので直接Paramを生成していてシングルトンになってなかった。 .Param こいつをStaticにできればいいのだが、Jsonで格納するときにスタティックにすると格納できない。 また伝わらない書き方だなあ Jsonとはなんなのか?stringなのか?typeだとしてどのJsonなのか? >>283 そのレベルのことは一通り基礎を終えれば分かるから、今はソースに直にstaticで書いとけ 言っちゃ悪いけど、まだ設定の外部化なんか考えるようなレベルじゃない シングルトンも忘れていい 参照型と値型を区別できないと普通に困るよ そのたびにここで質問するの? 俺はc#の仕様が面白かったので入門書みたいのを10回以上読んだ delegateとかeventとか他にはなかったから刺激的だった >シングルトンも忘れていい グローバル変数を散らばらせるとなかなか大変になるので、ここは最初に抑えること。 別にシングルトンでなくてもいいが、、スタチックはJson.netに保存できないので仕方なしに 調べていたらシングルトン。ほんまにトンだよな。たったこれだけのことに頭を 悩ませないといかんとは。 >>287 君は5かける3はと言われて 1から順に数字を答えてる状態にしか見えないんだけど >参照型と値型を区別できないと普通に困るよ そのたびにここで質問するの? いままさにこれに困っている。そこでプロパティにしたらどうなの?って実験してみようと思っている。 private clsGrovalParam _Param = new clsGrovalParam() {value1 = 1}; public clsGrovalParam Param { get { return _Param; } set { Param =_Param ;} } >>290 違うよ 九九の5X3を覚える 君にはそれがない 5を3回足すとか3を5回たすとか考えたり 5X3を覚えるとかがない 1から数え上げていって9当たりで疲れて質問に来る >>287 >グローバル変数を散らばらせるとなかなか大変になるので、ここは最初に抑えること それはそもそもグローバル変数が多いこと自体が問題。 まともな設計が身に着けば自然に減る。 シングルトンは基本的にアンチパターンであり、初心者が積極的に使うものではない。 >291 だめだよ。そういう覚え方は。最初は足と手の指を使って15までカウントする。 初心者には紛らわしい物言いだったので補足 シングルトンはメンバも含めて実質すべてグローバル変数な 休みの昼間っから真っ赤にしてる奴にろくなのはいない やりたいことと実力のレベルに差があって ちぐはぐしてるのは間違いない 例え15まで数えて正解しても次にはつながらないので 仕組みを理解してからのほうが良いのでは? 仕組みが理解できない場合いくら手を動かしても得られるものはないんでは? 初心者はなんでも場当たり的に解決しようとするが、これは意識しないと気が付かない悪い癖 仕組みを理解するために手を動かすのは正しい 仕組みを理解せずその場の答えを出すためにやみくもに手を動かすのは正しくない >295 細部はあまり関係ないと思う。 ベテランはそういう細部をきにするが、要するにシングルトンで何をしたいのか? どう機能するものなのか? それが大事なポイントじゃあるまいか。 名前の問題とか実装方法の問題じゃない。 別にシングルトンでなくてもいい。 ポイントはつまりアンチスパゲッティ。w 変数1,2、−−−100位は直ぐに散らばる。 これをまとめて一つにしておけば分かりやすい。まあ名前をまとめたところで参照は100か所に なるから、どうしたって散らばるが、変更箇所は1か所にすることができる。それに括りの名前を付けて おけばGrepできる。そういうメリットがある。ただそれだけのことだ。でもこれが大きい。 要するにインスタンスを一個しか持たないクラスにまとめたグローバル変数。 その割に実現がややこしい。w 設定データをシングルトンでって時点で何かがおかしい class Singleton { private Singleton(){} public static Singleton getInstace() { return SingletonHolder.INSTANCE; } private static class SingletonHolder { public static Singleton INSTANCE = new Singleton(); } private clsGrovalParam _Param = new clsGrovalParam() {value1 = 1}; public clsGrovalParam Param { get { return _Param; } set { Param =_Param ;} } } class clsGrovalParam { public int value1; public int value2; public int value3; } このシングルトンは駄目だな。Getinstanceするたびに_Paramがnewされる。_Paramがシングルトンにならんだろ。w ParamをStaticにしないでシングルトンを作るにはどうしたらいいんだ? >設定データをシングルトンでって時点で何かがおかしい アプリで共通に使うパラメータはシングルトンにする。 のがいいと思うのですが、、、、w >>309 単体テストが困難になるから避ける 大元のインスタンスはstaticでグローバルに共有してもいいけど、 そのグローバル変数に直接アクセスするのは最小限にしてコンストラクタなどで必要なものだけ受け取るようにするのが基本だよ >>282 しっかりした入門書なら決して「読んだだけ」になることはない >>309 スレの流れを把握してないのでひょっとしたら話が噛み合ってないかもしれないけど、 そういうのは、例えばVSが吐き出すプロジェクトのスケルトンで言ったらProgramみたいな クラスのstataicメンバーとして持てばいいだけの話で、むしろシングルトンで実装する必然性が分からない Staticで持つとJson.Netが保存を拒否する。 string json = JsonConvert.SerializeObject(Param); こんなの。 Staticでもってコピーすりゃいいだけか? そうだよな。w あれっ、保存できた。しかしスタディックにしても値が初期化されてしまう。 なんか別のインスタンスを作ってる。 なんかstaticメンバーとstaticクラスの区別が付いてない予感... 原因が分かった。 InitializeCompornent();がLoacalエリアをクリアしてる。 そんな馬鹿な。 Local変数でParamを宣言したときに clsParam Param = clsParam.GetInstance ().Param ; で値を代入してるのに。 コンストラクタのInitializeCompornent();がこのLoacalエリアをクリアしてる。そういうものか? でもやっぱり違う。ローカルを宣言して同時にGetInstanceで設定したら、その値が 入っている。 OK 次にInitializeCompornent();を実行する。 その次にもう一度このローカル変数にGetInstance()で代入したらクリアされてる。 おかしい。w このスレは勉強のために見ているけどID:agf4hW9w0は初心者に害悪でしかないな あ、この人数日前からしょうもない質問したり逆ギレしたりしてるお人かなw 正義(笑)をかさに着て人を追い出すようなことを言うのは好きじゃないけど、 それでも実況みたいなレスは自分で専用スレ立ててやった方がいいんじゃないの? Gofとか興味ないの? デザインパターンの大先生だよ。それが全然動かない。w たいそうな本出してる割には、、、、、とちょっと不信感が沸いてる。 思うにカッコつけた本でも具体例が提示できないとだめだな。 抽象的な説明はカッコいいが、具体的なサンプルで動かないとカッコばかりで駄目だな。 お前掛け算知らないの?と変わらないレスを書いて平気なんだな いくら初心者の発言だとしてもしらける >>312 >クラスのstataicメンバーとして持てばいいだけの話で、むしろシングルトンで実装する必然性が分からない Programの中に static ublic int Aaaa; って入れると このFieldにAaaaは割り当てられません。つにに規定値0を使用します。ってでるんだが、 シングルトンやっと動いた。w Programの中に書くってのもOKだな。Fieldワーニングがでるが。 イベントとデリゲートの違いがわかりません イベントを使わなくてもデリゲートでproperty changedが実装できました 両者の違いを教えて下さい デリゲートは特定のかたちの関数をいれれる変数 イベントはデリゲートを利用して登録した関数を実行できる仕組み >>332 イベントはメンバの一種、デリゲートは型の一種。 C#ではメソッドはオブジェクトではない。それを値として受け渡しするために、メソッドをオブジェクトとして包むための型がデリゲート。 イベントは、イベントに対してデリゲートを登録&削除するという一般的なパターンを簡単にかつ利用者に分かりやすく実装するための特殊なメンバ。 プロパティに相当する。実際、イベントの登録削除はプロパティのように独自に実装することもできる。 興味があるならイベントアクセサでググってみるといいよ。イベントを自分で実装してみれば完全に理解できるはず。 メソッドの引数に1000以上の要素を持ったリストを渡す場合、メモリの消費等考慮するとやはり参照渡しが良いでしょうか? リスト自体が参照なので、リストのアドレスをコピーするコストしか発生しないのでは? 自信はないので詳しい人教えてくだちい。 面倒くさいから解説しないが List<T>をそのまま渡そうがrefで渡そうがほとんど何も変わらん >>336 配列やリストは渡した先でインスタンスを書き換えない(nullにしたりしない)場合はref付けずにそのまま渡せ コピーして渡すわけじゃないから >>336 これ言葉遊びになりがちなんだよな 「値型の値渡し」、「値型の参照渡し」、「参照型の値渡し」、「参照型の参照渡し」をまとめて値渡しと参照渡しと呼ぶのが元凶なんだろうけどさ http://ufcpp.net/study/csharp/sp_ref.html >>334 adderとremoverというのがあって、+=で繋いだときはadderが呼ばれ、-=で削除したときはremoverが呼ばれるんですね ここが単なるデリゲートのマルチキャストとと違うところだと思いました どうもありがとうございました >>342 っていうか、コールバックを実現したいからと単純にデリゲート変数をそのまま公開すると、 (1) 外部からnullを代入できてしまう (2) 外部からInvokeできてしまう こういった問題がある。 だからデリゲート変数とは別のイベントに存在意義があるんでしょう C# WPF xaml上にキャンバス配置、その子にImageがあって、 このImageをタイマーで左に動かしたいのですが、Imageの座標の動かし方が分からないです。 Canvas.Letfや、Image.Leftと打っても「現在のコンテキストが存在しない」とエラーが返ってきます。 Blendでプロジェクト開いてストーリーボード追加して ドラッグして終わり という方法は一般的でないけど楽 ストーリーボードは使わず、タイマー+csのコードで出来る方法をお願いします。 image.Width ←OK image.Height ←OK image.Left ← 出来ない image.Top ← 出来ない canvasの子としてimageがあるから出来ないのかなとは思うのですが、 canvas.Left ←出来ない canvas.Top ←出来ない も出来ないからお手上げです。時間経過ごとに少しづつ画像を動かしたいだけなんですが・・・ 実際のimageにはLeftとかは存在しないので 別の場所で辞書のようなもので保存してる それが添付プロパティ setleftも試してて何でだろうと思ったら、usingでsystem.windows.controlを設定していませんでした。 ありがとうございます。 添付プロパティというのも初耳なので勉強します。 大学のプログラミングの課題を家でもできるようにしたいです 大学ではemacsでcファイルを作りコンパイラー(名称不明)にかけてgnuplot上でプログラムを実行してます ↑をできるような環境を自分のノートPCに作るために何をインストールすれば足りるでしょうか? 使用PCは富士通LIFEBOOK、OSはwindows10です >>351 ここはc#のスレであってcのスレじゃない スレチ まあ一番簡単なのはUSB起動のlinux使うか virtualboxにlinuix入れることかな すみません、どうやらC言語とC♯、C++の区別もついてないみたいです… 向こうに行ってcygwinやMinGWやMSYSやBOW入れろとか言われてたら笑う EmacsとGCCやGnuplot入れる前提でわざわざ変な環境使う意味がわからない >テンプレが読めない回答者、議論をしたいだけの人は邪魔 >C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください どう見てもこのシチュエーションでecmasは重要じゃないということが分からないおまえに笑う 学校の環境がemacsなんだろ マクロ使ってたら他じゃ実行できないじゃん コマンドでやればいいだけだろ(笑) わざわざlinux入れる労力 w Linux側で仕事してるヤツ、羽振りはいいけどいつもイライラしてるね Emacs使いたがるやつは医者に診てもらえっていってたのはStackOverflowの中の人だっけ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる