X



ふらっと C#,C♯,C#(初心者用) Part135
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 8b75-uWnk)
垢版 |
2018/02/04(日) 22:02:28.59ID:FbKpa1HN0
「どんなにくだらない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
0255恥人
垢版 |
2018/02/09(金) 21:57:48.11
アスペかよ
0258デフォルトの名無しさん (ワッチョイ 62e0-jA6l)
垢版 |
2018/02/10(土) 05:04:14.37ID:aLYixKao0
日経ソフトウェア買ったよ!
0259デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 08:55:01.53ID:agf4hW9w0
List<int> idata =new List<int> (){1,2,3,4,5,6};

foreach (var dt in idata)
{
dt = 0;
}
dt=0が代入できない。 idata[0]=0;は代入できる。これはどう考えたらいいんだ?
0261デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 10:58:14.53ID:agf4hW9w0
しかしLinqのForeachならセットできる。
0263デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 11:08:07.90ID:agf4hW9w0
List<Label> lbl = new List<Label>() { new Label(), new Label ()};
lbl.Add (new Label() );
foreach(var l in lbl) {
l.Text = "aaaa";
}
これはできるけど。
0264デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 11:14:08.02ID:agf4hW9w0
List<clsint> idata = new List<clsint>();
foreach (var i in idata)
{
i.val = 123;
} class clsint{ public int val;}
これもできるけど。
0265デフォルトの名無しさん (ブーイモ MM6d-nHV3)
垢版 |
2018/02/10(土) 11:15:02.53ID:h94azKRjM
dtが値型でも参照型でもコピー

参照型はアドレスがコピーされてるので
参照先のオブジェクトの書き換えが有効

値型は値自身がコピーされているので元の値に影響しない
0270デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 11:42:19.85ID:agf4hW9w0
>foreachで取ってきた要素はIEnumerator.Currentなので読み取り専用になる

参照型もIenumerator.Currentなのか?
なぜ読み取り専用でもライトできるのか?
0273デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 11:53:29.42ID:agf4hW9w0
>>271
なるほど!! 
0275恥人
垢版 |
2018/02/10(土) 12:07:40.93
>>272 >>274
グチグチうるせえな
0277デフォルトの名無しさん (ワッチョイ 3151-xK0a)
垢版 |
2018/02/10(土) 12:29:08.56ID:PglyRkoG0
読み取り専用の参照型の変数は参照は書き換えられないが、その参照を得ればそれが指し示す実体を読み書きできる
0278デフォルトの名無しさん (ブーイモ MM6d-nHV3)
垢版 |
2018/02/10(土) 12:35:19.58ID:h94azKRjM
Listは中に追加された値を保存してる

intとかの値型はその値自身を持ってる
クラスとかの参照型は対象になるクラスへの参照が入ってる

そのListの中にある参照先自体は変わってない

>>273
残念だけどその内容になるほどというとドツボにはまる
classじゃなくてstructにするとフィールドまで書き換えできないと気づく

フィールドに波及しないと言うのは誤った理解
0279デフォルトの名無しさん (ブーイモ MM6d-nHV3)
垢版 |
2018/02/10(土) 12:41:02.28ID:h94azKRjM
こんなところで怪しい回答に頼るより
しっかりした実績のある入門書に頼ったほうがいいよ

マジで

誰だってその時々で間違うし

本の時代は終わったなんていう奴がいるけど
webだけじゃ網羅的に勉強しづらい
0281デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:07:19.11ID:agf4hW9w0
foreach (var dt in idata)
{
dt = dt < min ? min : max < dt ? max : dt;
}
みたいなことができない。これはよくあるケースなので不便。
0282デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:11:16.15ID:agf4hW9w0
>しっかりした実績のある入門書に頼ったほうがいいよ

最近2冊ほど読んだけど、細かいところはやってみないとわからないよ。読んだだけでは無理。
なれが必要だ。で慣れるためにコードを書く。しかしサッパリ動かない。w
0283デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:15:58.33ID:agf4hW9w0
//パラメータをシングルトンで持たせたいのだが、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で格納するときにスタティックにすると格納できない。
0285デフォルトの名無しさん (ブーイモ MMb6-sLQd)
垢版 |
2018/02/10(土) 13:30:10.75ID:S1subAI+M
>>283
そのレベルのことは一通り基礎を終えれば分かるから、今はソースに直にstaticで書いとけ
言っちゃ悪いけど、まだ設定の外部化なんか考えるようなレベルじゃない
シングルトンも忘れていい
0286デフォルトの名無しさん (ブーイモ MM6d-nHV3)
垢版 |
2018/02/10(土) 13:32:00.29ID:h94azKRjM
参照型と値型を区別できないと普通に困るよ
そのたびにここで質問するの?

俺はc#の仕様が面白かったので入門書みたいのを10回以上読んだ
delegateとかeventとか他にはなかったから刺激的だった
0287デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:37:02.28ID:agf4hW9w0
>シングルトンも忘れていい

グローバル変数を散らばらせるとなかなか大変になるので、ここは最初に抑えること。
別にシングルトンでなくてもいいが、、スタチックはJson.netに保存できないので仕方なしに
調べていたらシングルトン。ほんまにトンだよな。たったこれだけのことに頭を
悩ませないといかんとは。
0289デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:40:22.73ID:agf4hW9w0
>参照型と値型を区別できないと普通に困るよ そのたびにここで質問するの?

いままさにこれに困っている。そこでプロパティにしたらどうなの?って実験してみようと思っている。
private clsGrovalParam _Param = new clsGrovalParam() {value1 = 1};

public clsGrovalParam Param
{
get { return _Param; }
set { Param =_Param ;}
}
0290デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:41:47.03ID:agf4hW9w0
>>288
最初はそうでしょ。だれでも
0294デフォルトの名無しさん (アウアウウー Saa5-sLQd)
垢版 |
2018/02/10(土) 13:53:43.90ID:2bX56Vysa
>>287
>グローバル変数を散らばらせるとなかなか大変になるので、ここは最初に抑えること
それはそもそもグローバル変数が多いこと自体が問題。
まともな設計が身に着けば自然に減る。
シングルトンは基本的にアンチパターンであり、初心者が積極的に使うものではない。
0295デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 13:55:47.90ID:agf4hW9w0
>291
だめだよ。そういう覚え方は。最初は足と手の指を使って15までカウントする。
0296294 (アウアウウー Saa5-sLQd)
垢版 |
2018/02/10(土) 13:56:15.28ID:2bX56Vysa
初心者には紛らわしい物言いだったので補足
シングルトンはメンバも含めて実質すべてグローバル変数な
0298デフォルトの名無しさん (アウアウウー Saa5-nHV3)
垢版 |
2018/02/10(土) 14:04:44.96ID:oqzsam8ba
やりたいことと実力のレベルに差があって
ちぐはぐしてるのは間違いない

例え15まで数えて正解しても次にはつながらないので
仕組みを理解してからのほうが良いのでは?
0303デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 14:16:21.43ID:agf4hW9w0
>295
細部はあまり関係ないと思う。
 ベテランはそういう細部をきにするが、要するにシングルトンで何をしたいのか? 
どう機能するものなのか?
それが大事なポイントじゃあるまいか。 名前の問題とか実装方法の問題じゃない。
別にシングルトンでなくてもいい。

ポイントはつまりアンチスパゲッティ。w

変数1,2、−−−100位は直ぐに散らばる。
これをまとめて一つにしておけば分かりやすい。まあ名前をまとめたところで参照は100か所に
なるから、どうしたって散らばるが、変更箇所は1か所にすることができる。それに括りの名前を付けて
おけばGrepできる。そういうメリットがある。ただそれだけのことだ。でもこれが大きい。
0304デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 14:20:22.95ID:agf4hW9w0
要するにインスタンスを一個しか持たないクラスにまとめたグローバル変数。

その割に実現がややこしい。w
0308デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 16:43:32.86ID:agf4hW9w0
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にしないでシングルトンを作るにはどうしたらいいんだ?
0309デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 16:45:37.25ID:agf4hW9w0
>設定データをシングルトンでって時点で何かがおかしい
アプリで共通に使うパラメータはシングルトンにする。
のがいいと思うのですが、、、、w
0310デフォルトの名無しさん (ブーイモ MM62-sLQd)
垢版 |
2018/02/10(土) 16:52:28.02ID:eFhUfahpM
>>309
単体テストが困難になるから避ける
大元のインスタンスはstaticでグローバルに共有してもいいけど、
そのグローバル変数に直接アクセスするのは最小限にしてコンストラクタなどで必要なものだけ受け取るようにするのが基本だよ
0312デフォルトの名無しさん (アウアウエー Sa4a-W6/A)
垢版 |
2018/02/10(土) 17:05:43.20ID:nWm1Yfxva
>>309
スレの流れを把握してないのでひょっとしたら話が噛み合ってないかもしれないけど、
そういうのは、例えばVSが吐き出すプロジェクトのスケルトンで言ったらProgramみたいな
クラスのstataicメンバーとして持てばいいだけの話で、むしろシングルトンで実装する必然性が分からない
0313デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:15:55.14ID:agf4hW9w0
Staticで持つとJson.Netが保存を拒否する。
0314デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:17:35.19ID:agf4hW9w0
string json = JsonConvert.SerializeObject(Param);
こんなの。
0315デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:18:43.93ID:agf4hW9w0
Staticでもってコピーすりゃいいだけか? そうだよな。w
0316デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:24:59.76ID:agf4hW9w0
あれっ、保存できた。しかしスタディックにしても値が初期化されてしまう。
なんか別のインスタンスを作ってる。
0318デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:43:18.71ID:agf4hW9w0
原因が分かった。
InitializeCompornent();がLoacalエリアをクリアしてる。
そんな馬鹿な。
Local変数でParamを宣言したときに
clsParam Param = clsParam.GetInstance ().Param ;
で値を代入してるのに。
コンストラクタのInitializeCompornent();がこのLoacalエリアをクリアしてる。そういうものか?
0320デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:52:03.67ID:agf4hW9w0
ごめん。ローカル変数。
0321デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 17:54:10.49ID:agf4hW9w0
でもやっぱり違う。ローカルを宣言して同時にGetInstanceで設定したら、その値が
入っている。 OK
次にInitializeCompornent();を実行する。
その次にもう一度このローカル変数にGetInstance()で代入したらクリアされてる。
おかしい。w
0323デフォルトの名無しさん (アウアウエー Sa4a-W6/A)
垢版 |
2018/02/10(土) 17:58:07.62ID:nWm1Yfxva
あ、この人数日前からしょうもない質問したり逆ギレしたりしてるお人かなw

正義(笑)をかさに着て人を追い出すようなことを言うのは好きじゃないけど、
それでも実況みたいなレスは自分で専用スレ立ててやった方がいいんじゃないの?
0324デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 18:07:33.04ID:agf4hW9w0
Gofとか興味ないの? デザインパターンの大先生だよ。それが全然動かない。w
たいそうな本出してる割には、、、、、とちょっと不信感が沸いてる。
0325デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 18:10:31.89ID:agf4hW9w0
思うにカッコつけた本でも具体例が提示できないとだめだな。
抽象的な説明はカッコいいが、具体的なサンプルで動かないとカッコばかりで駄目だな。
0327恥人
垢版 |
2018/02/10(土) 18:19:18.91
言うほど気になるか?
0330デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 19:19:01.09ID:agf4hW9w0
>>312
>クラスのstataicメンバーとして持てばいいだけの話で、むしろシングルトンで実装する必然性が分からない
Programの中に
static ublic int Aaaa;
って入れると このFieldにAaaaは割り当てられません。つにに規定値0を使用します。ってでるんだが、
0331デフォルトの名無しさん (ワッチョイ 319d-+g9t)
垢版 |
2018/02/10(土) 19:39:15.98ID:agf4hW9w0
シングルトンやっと動いた。w

Programの中に書くってのもOKだな。Fieldワーニングがでるが。
0334デフォルトの名無しさん (ブーイモ MM85-sLQd)
垢版 |
2018/02/11(日) 13:06:10.79ID:v1VeVCTSM
>>332
イベントはメンバの一種、デリゲートは型の一種。
C#ではメソッドはオブジェクトではない。それを値として受け渡しするために、メソッドをオブジェクトとして包むための型がデリゲート。
イベントは、イベントに対してデリゲートを登録&削除するという一般的なパターンを簡単にかつ利用者に分かりやすく実装するための特殊なメンバ。
プロパティに相当する。実際、イベントの登録削除はプロパティのように独自に実装することもできる。
興味があるならイベントアクセサでググってみるといいよ。イベントを自分で実装してみれば完全に理解できるはず。
0342デフォルトの名無しさん (ワッチョイ c29f-IOan)
垢版 |
2018/02/11(日) 16:15:49.09ID:OiJFvi0/0
>>334
adderとremoverというのがあって、+=で繋いだときはadderが呼ばれ、-=で削除したときはremoverが呼ばれるんですね
ここが単なるデリゲートのマルチキャストとと違うところだと思いました
どうもありがとうございました
0343デフォルトの名無しさん (アウアウエー Sa4a-W6/A)
垢版 |
2018/02/11(日) 16:44:34.62ID:OIEAsiwva
>>342
っていうか、コールバックを実現したいからと単純にデリゲート変数をそのまま公開すると、

(1) 外部からnullを代入できてしまう
(2) 外部からInvokeできてしまう

こういった問題がある。
だからデリゲート変数とは別のイベントに存在意義があるんでしょう
0344デフォルトの名無しさん (ワッチョイ edbb-jA6l)
垢版 |
2018/02/11(日) 16:44:55.18ID:zggVxteM0
C# WPF
xaml上にキャンバス配置、その子にImageがあって、
このImageをタイマーで左に動かしたいのですが、Imageの座標の動かし方が分からないです。

Canvas.Letfや、Image.Leftと打っても「現在のコンテキストが存在しない」とエラーが返ってきます。
0347デフォルトの名無しさん (ワッチョイ edbb-jA6l)
垢版 |
2018/02/11(日) 17:04:07.30ID:zggVxteM0
ストーリーボードは使わず、タイマー+csのコードで出来る方法をお願いします。

image.Width ←OK
image.Height ←OK
image.Left ← 出来ない
image.Top ← 出来ない

canvasの子としてimageがあるから出来ないのかなとは思うのですが、
canvas.Left ←出来ない
canvas.Top ←出来ない

も出来ないからお手上げです。時間経過ごとに少しづつ画像を動かしたいだけなんですが・・・
0350デフォルトの名無しさん (ワッチョイ edbb-jA6l)
垢版 |
2018/02/11(日) 17:19:28.14ID:zggVxteM0
setleftも試してて何でだろうと思ったら、usingでsystem.windows.controlを設定していませんでした。
ありがとうございます。
添付プロパティというのも初耳なので勉強します。
0351デフォルトの名無しさん (ワッチョイ 99b3-jA6l)
垢版 |
2018/02/11(日) 18:04:06.76ID:eSM+gwdh0
大学のプログラミングの課題を家でもできるようにしたいです
大学ではemacsでcファイルを作りコンパイラー(名称不明)にかけてgnuplot上でプログラムを実行してます
↑をできるような環境を自分のノートPCに作るために何をインストールすれば足りるでしょうか?
使用PCは富士通LIFEBOOK、OSはwindows10です
0353デフォルトの名無しさん (ワッチョイ e175-xK0a)
垢版 |
2018/02/11(日) 18:07:22.85ID:/hLQhQLG0
C言語とC#は別だぞ〜
■ このスレッドは過去ログ倉庫に格納されています

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