ふらっと C#,C♯,C#(初心者用) Part137
レス数が950を超えています。1000を超えると書き込みができなくなります。
「どんなにくだらない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 データベースを使わないで、インデックスが共通する複数のデータ配列を作りたいときってどういう風な実装が最適なんでしょうか
var A = new int[x]
var B = new int[x]
var C = new int[x]
・
・
・
var E = new int[x]
みたいな感じです スコープが原因だろうから全体のソース出さないとエスパーだらけの回答になるよ >>851
struct Hoge
{
int A;
int B;
int C;
int D;
int E;
}
....
var hogeArray = new Hoge[100]; 複数のクラスで共通の変数定数を外出しして、
その変数クラスを継承するのって良し悪しで言うとどうでしょうか
is aなのかちと微妙な感じです
内臓名クラスを継承して動物クラスを作ってるような
has aなのでオブジェクトとして渡すべきですか? >>859
共通の変数などという低い抽象度でクラス設計を考えるのがそもそも間違ってる
実装からクラスを考えると必ず破綻するから、君の今の考え方のまま進む限りはいかなる選択肢も不正解
とはいえ最初から抽象度を上げて設計しろといっても初心者には無理な話だから、気にせず自分の思うように作ればいい
一通りモノ作れるようになったらオブジェクト指向モデリングの書籍を読むことをお勧めする オブジェクト指向プログラミングしない方がいいもの作れるよ
関数で組む方法を極めた方がいい >>860
>オブジェクト指向モデリングの書籍
例えばどんな本がありますか?特におすすめ、とかじゃなくてもいいです
どういう本が該当するのかよくわからないのです >>862
王道はエリック・エヴァンスとかダグ・ローゼンバーグとか
今読んでも実際のコーディングに対しては何の参考にもならないと思うよ どのプログラム言語を選ぶかでオブジェクト指向モデルの実現方法がかなり違う >>863の本くらいの抽象度になると実装方法にはほとんど依存しないよ
それどころかオブジェクト指向モデルすらも方法論全体の中では下層の方に位置付けられる とりあえず入門レベルが終わったんだけど次はeffective c#4.0っての読めばいいですか? more effective C# 6.0 7.0ですか?
moreとついてるので前の本を読む必要があるかと思っていたんですが大丈夫そうならそちらを購入しようかと思います フォーム間でのデータのやりとりはどうするのが一般的なのでしょうか?
例えば、Form2の表示と同時に、Form1に入力済みのデータをForm2に表示させる場合、今は以下のようにしています。
class Form1
{
public object Data{get; set;}
var form2 = new Form2();
form2.Parent = this;
}
class Form2
{
public Form Parent{get; set;}
Load()
{
this.Data = Parent.Data;
}
} >>869
言語仕様とか環境の変化で不要になった部分をバージョンアップしてるから
今からかうなら最新だけでいい
初版と4.0と最新で内容は被っている ビジュアルスタジオでC#使ってると、どんどんコードスタイルが簡略化されていくんだよな。 SocketクラスのBeginConnectとかBeginReceiveとかに渡すコールバック関数を
staticで書いてあるのとそうでないのと両方見かけるんですけど
どっちが良いんでしょう? まあ、C#ならコールバックは登録解除を明示的に行うからスタティックである必要は無いけどな。
でもこれがイベントハンドラからのデリゲートなら話は別だ。 >>875
そのSocketオブジェクトに合わせるのが正解
Socketを生で使うサンプルってスキルの低い業務ドカタが書いてたり書かれた時代が古かったりすることが多いので、
C#をよく理解してなくてCやVBの感覚でstaticにしないといけないと思ってるようなのが多い >>876
イベントハンドラからのデリゲートとはどういう状況でしょう?
>>877
なるほどありがとうございます! TextBoxか、MaskedTextBoxに単位をつけたい。
小数点有りや無し、-の数値を入力できたりするものってできますか?
-2℃
14℃
25.5℃
2.5℃ テキストボックスの横にラベルで単位でも書いておこうぜ
□㌕ >>879
入力支援・単位の入力補完・数値⇔文字列の変換
何でもできるけどホントにしたいことがそのレスでは分からない >>873
え、more付いてないのと付いてるのって同じ本なん?
独習C#と言い、命名がわけわからんな… 説明不足ごめんなさい。
出力ですが、最終的にはTextBoxの枠ごと印刷したいと考えております。
883の言う単位の入力補完だと思います。
MaskedTextBoxのマスクに####℃と記入し、
「-24.4」等のデータをデータベースから取り出して、入れたところMaskedTextBox.Textが244℃となってしまいました。
このテキストボックスを小数点有りの場合、なしの場合、負の符号が有りの場合なしの場合、「----」の場合、
1桁から5桁+「℃」としてTextBox.Textに出力したいと考えております。
できますか? TextBoxクラスを継承して自前で実装すればできる TextBoxクラスを継承してTextプロパティを上書き
書式とか単位を属性に持たせれば汎用的に使える。
コピペされたときの場合も考慮すること ありがとうございます。
なんとなく、それっぽいものが作れそうです。 ユーザーコントロールでボーダーなしテキストボックスとラベル並べた方が楽な気がする テキストボックスの描画や挙動を弄るの面倒くさいから汎用性を求めるんなら InputMan 買った方がいいよ NuGetで参照できるオープンソースのWinFormsリッチコンポーネントって何が有名なの? c#で穴ぼこメモリにしないように組むのって不可能? 可能だが、規模によっては現実的でない
パフォーマンスを気にするなら、別にボトルネックが存在していないかを見直す方が先 OSの仕事
どうしても嫌でデカいbyte配列確保して中に文字や数字全部入れても無駄 >>899
それでも駄目なの?
もうサービス部分はC言語で組んだほうが良さげ? GCが勝手に詰めてくれるから気にしなくていい
ただし巨大なオブジェクトは専用の領域があって移動されないので断片化されやすいから注意 >>900
Cだって確保管理はOSの仕事だろ
何のためにメモリの管理をOSに任せたくないんだ? >>903
Cだってオブジェクト毎の領域をそれぞれ全てOSが管理しているわけじゃない
mallocが効率化のためにだいぶ仕事してる OSでメモリはブロックなどで管理されていて要求があったら
要求サイズに合わせてそのブロックの中のさらに細かいブロックなどを払いだしてる
こっちがどうしようとOSでブロックを作ってその中でやりくりしてる
例えそのブロックの中で断片化していて何か不都合あるのか? 使う予定の最大量の倍の空きメモリーあれば大体は気にならない。
いまどきのパソコンはアプリが使いたいメモリーサイズの数百倍は有るから気にするな。 リークしてると1ヶ月ぐらいで死ぬじゃん
現状自分でメモリ管理しないとどこで何が確保されてるのかわからないわけで
そういうの確実に管理したいときはc言語のがいいのかなぁ?と 極めて厳密に管理したいならC/C++でアロケータを自前で書くというのはあり得る
しかしリークという点ではC#よりC/C++の方が遥かにやっちまい易いので, メモリ安全を確保する目的でC/C++で書くのは本末転倒のように思う List#Containsの重複判定基準をEquals以外にすることはできないでしょうか?
ListにしたいクラスのEqualsが、別の目的用にオーバーライドされている為、Equalsを使うことができません。 >>909
c#は現在実行中のアプリのインスタンスを確認する方法はあるの? >>911
>Equalsが、別の目的用にオーバーライドされている
常識的にはそっちの方が解消すべき「問題」のように思うけど... >>908
Webサービスか何かを想定してる?
だったらコーディングで対応するんでなく、ロードバランサで複数のアプリケーションサーバに振り分けて
サービスが止まらない様にしつつ、一部のサーバをオンメンテでリブートすべし C#スレでメモリーリークを心配するとか、どんだけ無能なんだよ。 普通はリークで死ぬ前にGen2GC連発して性能ガタ落ちになるんじゃ
どんだけ握ってんだよと 実際にメモリリークが起こらないように気をつける術は昔ながらの方法しかない?
プロジェクトでnewするときはインスタンスマネージャー的なのを通して
可能な限りインスタンスを監視するとかそんなの? >>918
一時的なオブジェクトはもう必要ないなら握りっぱなしにしないで即座に使い捨てること
中途半端に握りっぱなしにしてるとGCの世代か昇格してメモリ使用量の増加やGCのパフォーマンス低下の原因になる
一方、単寿命オブジェクトのGCは爆速なので、newしたら積極的にすぐ放置すべき C#でメモリリークさせるコード書く奴がC/C++で無くせるとは到底思えないわ >>921
うーん
爆速ではないなぁ
3分に1回動かしてる処理があるんだけど
強制GCせずにずっと動かしてるとき
メモリ使用量がかなりあがった状態でGCが動くと
3分に一度の処理のタイミングがズレちゃうんだよね
そこで強制GCも十分に一度ぐらいの頻度で動かしてる状態 ちゃんと設計してればC#でメモリーリークなんて気にすることなんてあるか?
そんなガバガバ設計してるやつがCだったら大丈夫なんだけど、って馬鹿な話誰が信じるよ >メモリーリークなんて気にすること
ページフォルトを気にしないヴァカっていたな。
リークしていないが累積しすぎたページフォルトがOSを殺す C#でリークやらかす奴がC/C++でやらかさない道理がない まあ、でもC#はメモリー管理を隠蔽しちゃったから、実はCやC++よりメモリー管理しにくいんだよな。 未確認飛行のSpan説明みてサンプルコード動かそうとしたんだけど
using System.Memory;すると
CS0305ジェネリック種類 'Memory<T>' を使用するには、1 型引数が必要です。
って叱られるのなんで?
VSもCoreも最新 System.Spanにしてもでてきおる
using static System.Memory<string>;
ってするとエラーは消えた フォームアプリでマウスクリックでイベントをはっせいさせているのですが、
ある処理ループの実行中はこのクリックイベントの割り込み発生を禁止させたいです。
マウスクリック割り込みイベントを無効化、有効化する方法ってないでしょうか? >>937
そうじゃないusing System;ってこと >>938
-=、+=
デザイナーみればわかると思うよ >>938
Control.Enabled
どうでもいいけど、「割り込みイベント」って表現は間違ってるから他所では使わない方がいいよw 処理中フラグ持っておいて
クリックイベントの入り口で処理中ならreturnするのでよくない?
bool 処理中=false;
クリックイベントの頭
if(処理中)return; ボタンからしか起動しない処理だと保証されてるなら-=+=でもフラグでもいいが
そうでないなら真面目に並列処理管理しないとね はあ?
クリックイベント自体を抑止したのか?
意味あるの? 処理ループの中でメッセージループを実装してGetMessage()でマウスイベントをフィルターかな?或いは読み捨てる >>939
つまりSpanを使うのにusing System;さえすればいいってこと?
ごめんな、クソ素人過ぎて質問がまずいのか
http://ufcpp.net/study/csharp/resource/span/の
var s = "abcあいう亜以宇";
var sub = s.Substring(3, 3);
var span = s.AsReadOnlySpan().Slice(3, 3);
for (int i = 0; i < 3; i++)
{
Console.WriteLine((sub[i], span[i])); // あ、い、う が2つずつ表示される
}
を試したいんだけど、できないって話なんだ >>933
やっぱりそうだよね
厳密にやろうと思ったら昔ながらの方法でやるしかないんだよね レス数が950を超えています。1000を超えると書き込みができなくなります。