ふらっと C#,C♯,C#(初心者用) Part147

■ このスレッドは過去ログ倉庫に格納されています
2020/02/19(水) 17:25:41.55ID:IsrGexiaF
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part146
https://mevius.5ch.net/test/read.cgi/tech/1576069931/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
33デフォルトの名無しさん (ワッチョイ cf2d-z3z/)
垢版 |
2020/02/22(土) 18:39:28.34ID:7CwG8WAb0
>>32
ほんと、不思議で不思議でたまらなかったわ
ありがとう
2020/02/22(土) 19:49:40.56ID:CYM04x9q0
OSSの中身確認するのが一番早いよ
入り口さえわかれば後の処理を追うのは簡単
35デフォルトの名無しさん (ラクッペペ MM7f-wHG4)
垢版 |
2020/02/23(日) 00:10:20.60ID:wbGqawi7M
くだらねえ������
2020/02/23(日) 11:37:03.29ID:h4Sd0hn50
すいません。名前の付け方で悩んでます
Wifiをアプリ全体のグローバルにしようとしているのですが、名前をどうつけたものか・・

program.csの中で
static class Program
{

/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

static public WifiControl WifiCtrl = new WifiControl();//テスト
static private long i=100;//テスト
}

こんな感じで宣言してみたのですがプログラム全体で使われるような変数ってどんなルールで名前つけますか?
このままWifiControlなんて名前でいいものか・・・
2020/02/23(日) 11:42:20.62ID:h4Sd0hn50
逆だった
WifiCtrl
でいいものか・・・
2020/02/23(日) 12:15:23.08ID:U1SoOOADa
WifiControlが自作クラスならそっちをSingletonにして WifiControl.Instance でアクセスできるようにすべき
class WifiControl {
private WifiControl() {}
private static WifiControl _instance = new WifiControl();
public static WifiControl Instance { get => _instance; }
}
WifiControlが改変不能ならstaticプロパティをクラス名と同名で Program.WifiControl にする
へんにクラス名とプロパティ名が不一致なのは良くない
あとProgramクラスよりもEnvとかConfigとかそういう別クラスを作ってそっちのプロパティとして持たせるほうが良い気も
39デフォルトの名無しさん (アウアウウー Sae7-icJa)
垢版 |
2020/02/23(日) 15:06:59.69ID:GBgAuRZAa
>>36
名前が適切かどうかはそれだけの情報では誰も判断できないでしょうw

質問は変数のネーミングだけど、そもそも変数(フィールド)をそのまま公開するのは
普通は良くない作法だよね。

読み出し専用のプロパティーにした方がいいと思う。
シングルトンにする必要性は個人的には疑問
2020/02/23(日) 15:19:44.33ID:mVzZkmaX0
>>36
変数名を単体で悩むより、名前空間を適切に使えばいいのでは?
2020/02/23(日) 16:11:03.65ID:HGdGso/xM
シングルトンかっこいいじゃん
2020/02/23(日) 16:40:17.12ID:qRVHuH/p0
わかる
2020/02/25(火) 12:06:33.83ID:K+FIgRaj0
シングルトンって利点がよく分からない
それもうstatic classで良くない?って思うんだけど継承とかインターフェースのためだけにそうしないだけ?
44デフォルトの名無しさん (アウウィフ FFe7-IPX/)
垢版 |
2020/02/25(火) 13:15:34.49ID:FzVRg2bhF
static Struct
2020/02/25(火) 13:22:35.51ID:5IAL5cM20
singletonならインスタンス生成タイミングを制御できる利点がある
初期の立ち上げを極力軽くしたい時とか
そういうのあんま気にしなくていい環境ならstaticでもいいかと
2020/02/25(火) 13:30:56.90ID:rfLfmv0Z0
>>43
デバイスなどのアクセスでインスタンス2つ持ちが意味無いかバッティングするから1つにしたいとき?

ログ出力とか単一のファイル書き込み読み込み
DBアクセス(同時アクセス不可時)とかいいかな?

一応やっといてバッティング対策必要だったらやる感じで?
(まあ、だいたいライブラリ側でやってくれっけど)
2020/02/25(火) 14:03:18.98ID:K+FIgRaj0
>>45
static classだって静的コンストラクタで実質同じ事できるじゃん
_instance ?? (_instance = new Class())って形と実質同じだよね
まぁ継承使えないとか制約多いからってことなんだろうけど、staticおじさんアレルギーなのか知らないけど死んでもstaticは使わないって風潮もどうかと思う昨今
48デフォルトの名無しさん (アウアウウー Sae7-icJa)
垢版 |
2020/02/25(火) 14:12:26.94ID:o7stKPona
ほとんどの場合ちょっと大げさ過ぎる感じなんだよねシングルトン。

唯一であることを保証するのにそこまで強制力が必要か疑問だし、
唯一であることを保証する責任を「その」クラス自身に負わせるのが本当に妥当かどうかも疑わしい。

ほとんどの場合、プログラムで唯一のものを共有したいなら、
共有オブジェクト取得用のstaticクラスを作る方が普通に素直な考え方に感じるよね。

必要論者はポカ防止のために強制力が必要って言うんだろうけど
それは問題のすり替えだと思うんだよね。
そんなポカが起こる状況自体が間違ってるよね。

もちろん絶対の強制力が必要なケースだってたぶんあるとは思うけど。

>>47
まあ少なくとも、一度staticクラスでシングルトン実装しちゃうと
今度はマルチにしたいと思っても簡単にできない問題はある。

だからstaticクラスでシングルトンも個人的にはちょっと気持ち悪く感じる
2020/02/25(火) 14:16:11.11ID:9IyrqwVFM
激しく同意
シングルトンを使う奴はほぼ例外なく「インスタンスを唯一に制限するため」を言い訳にして、その実はグローバル変数が欲しいだけ
実際にはインスタンスが一つでなければならないクラスなどほとんどない
一つしか作れないのではなく「アプリで一つしか必要ない」のであれば、>>48のようにstatic寄せ集めクラスを作るべき
2020/02/25(火) 14:33:00.25ID:oSeHo6cg0
>>47
>static classだって静的コンストラクタで実質同じ事できるじゃん
static classのコンストラクタがいつ実行されるかはコントロールできないよ

確実にlazy loadingしたい場合や
高価なリソースなので状況によっては解放したい場合とか
いろいろと使いどころある

逆にシングルトンは面倒くさいから
static classで間に合うユースケースならstatic使っとけばいい
2020/02/25(火) 15:01:43.07ID:IPCihoyTM
おかしい…「モダン言語と現行ライブラリ下においてはシングルトンパターンを適用することは通常開発下ではまずないが」という大前提がまったく共有されていない…
もしかして10年前の感覚で脳内敵を殴りつけてスッキリ喋ってる…?
52デフォルトの名無しさん (ワッチョイ ff63-ufZq)
垢版 |
2020/02/25(火) 15:04:06.03ID:9vKHdmbh0
テメエも皮肉ってればいいと思ってんなよガキ
2020/02/25(火) 15:27:35.00ID:1xtbBMnCp
死んでもstatic使わない、じゃなくて死んでもシングルトン使わない、の話になってるが
2020/02/25(火) 17:25:56.66ID:5IAL5cM20
singletonがデザパタの中で意義も理解しやすく実装もそこそこ分かりやすく楽で有効に利用できると思わせる範囲が広いから無駄に広まってしまった
他により有効な手段ができても単一インスタンスだからsingletonで!っていう脳死とstaticは結局グローバルだからとにかく駄目!とかいうこれまた脳死が合わさってしぶとく使われているだけじゃない?
2020/02/25(火) 19:02:03.46ID:YCFpdAhz0
どこにstaticはとにくかくダメだなんて話が出てるのか
56デフォルトの名無しさん (ワッチョイ ffad-KTmx)
垢版 |
2020/02/25(火) 20:48:36.91ID:CjA4SEoV0
GoF初版は4半世紀前のJavaすら出る前だぜ
そろそろ新しい版を誰か書いて
2020/02/25(火) 21:46:44.65ID:rfLfmv0Z0
初めstaticで足りると思ったんだけど
対象のクラスに
継承やIFいんじゃんクソが
ってなるといつの間にかにシングルトンなってたりするだけだ
2020/02/25(火) 22:40:31.11ID:BegpSlwc0
>>57
これだよね。
staticクラスやグローバル変数でもいいんだけど呼び出し側に影響させないで実装を拡張できるという。
2020/02/25(火) 23:30:16.22ID:K+FIgRaj0
>>50
シングルトンが初回アクセス時に実行されるのと同様にstaticコンストラクタもそのクラスのいずれかに初回アクセス時に実行されるから同じ事だと思うよ
2020/02/26(水) 01:29:08.48ID:sMj0eedP0
>>59
初回アクセス時よりも前にロードされることが保証されてるのと
初回アクセスしたそのタイミングで実行されるのとは意味が違う

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members

仕様としては明記されてないが
static classを含むnamespaceがロードされるタイミングでstatic classもロードされてたはず
2020/02/26(水) 10:56:30.52ID:/kjPVa9J0
型名の一部でしかないnamespaceのロードって何…?
2020/02/26(水) 11:28:50.62ID:sMj0eedP0
>>60
念の為試してみたら俺が間違ってたわ
すまん

static classでもLazy<T>使えば必要なタイミングまで確実に遅延できた
2020/02/26(水) 12:01:04.52ID:QHwYyYy1d
当たり前なんだけどsingletonでしか実現できない話じゃなくてsingletonなら自然にできる話だからね
singletonじゃなくたって実現方法はいくらでもある
こうすりゃできるなんてわかりきった上で話してるんだよ
64デフォルトの名無しさん (ワッチョイ b301-8X5p)
垢版 |
2020/02/26(水) 12:04:17.00ID:xo5HgIYJ0
>>63
そのsingletonが有用な場面ってのを解説してくれ
2020/02/26(水) 12:08:38.94ID:QHwYyYy1d
>>64
環境的にstaticが使えないとか?C#じゃあんまないんじゃない?
組み込みC環境だとstatic不可とかあるよ
2020/02/26(水) 12:11:40.77ID:QHwYyYy1d
ところでsingletonが有用な場面ってどっから湧いた話?
過去レス確認したけど、俺そんなこと言ってなかったんだけど
2020/02/26(水) 12:16:01.74ID:91Y2xJrV0
>>60
メンバーの話じゃなくてコンストラクタね
static class Human
{
static Human(){} //←この部分は保証されてる
}
68デフォルトの名無しさん (JP 0H82-SZE8)
垢版 |
2020/02/26(水) 14:16:45.27ID:oid0ZUpoH
ある強力なFor関数を紹介いたす(C#)
ttp://x0000.net/topic.aspx?id=3630-0

アルファ・ラボ|学術掲示板群
(理系 文系 工学 語学)
ttp://x0000.net/
2020/02/26(水) 15:11:05.12ID:/kjPVa9J0
ただのAggregateでは?
70デフォルトの名無しさん (アウアウウー Sa2f-A7eh)
垢版 |
2020/02/26(水) 17:52:39.14ID:FtoTEkgba
>>64
昨日>>48に書いた通り俺は唯一性に強制力を持たせる必要性については
懐疑的だけど、シングルトン的な発想が有用なケースは結構あるとは思う

例えばUIでいろんな場面で表示する必要があるサブ画面みたいなのがある時、
こんなことやってる人多いんじゃないかな
public partial class Form2 : Form
{
  public Form2()
  {
    InitializeComponent();
  }

  private static Form2 Singleton { get; set; }

  public static void ShowSingleton()
  {
    if (Singleton == null || Singleton.IsDisposed) Singleton = new Form2();
    if (Singleton.WindowState == FormWindowState.Minimized)
      Singleton.WindowState = FormWindowState.Normal;
    Singleton.Show();
    Singleton.BringToFront();
  }
}
2020/02/26(水) 18:15:26.79ID:uSMym8r00
>>70
それはシングルトンじゃねーよ
まずシングルトンはnewしない
2020/02/26(水) 18:19:20.31ID:ZCj63VZA0
>>71
一回目は作るべ?
73デフォルトの名無しさん (アウアウウー Sa2f-A7eh)
垢版 |
2020/02/26(水) 18:21:41.53ID:FtoTEkgba
>>71
揚げ足取りはいいけど、よく読んでからにして欲しいよね
2020/02/26(水) 18:22:19.21ID:uSMym8r00
>>72
つか、インスタンスは自分自身の中にスタティックで用意する
そのクラスのスタティックプロパティー経由でインスタンスを参照するが
最初の参照時にシングルトンクラスで自身の中に生成する

だから外部で使うクラスはインスタンスを明示的に生成しません
2020/02/26(水) 18:30:13.02ID:/kjPVa9J0
> インスタンスは自分自身の中にスタティックで用意する
private static Form2 Singleton { get; set; }
用意してるな

> 外部で使うクラスはインスタンスを明示的に生成しません
public static void ShowSingleton()
{
 if (Singleton == null || Singleton.IsDisposed) Singleton = new Form2();
してないな
2020/02/26(水) 18:40:31.49ID:qN9Z1rJQM
>>62
それ実体が生成されないだけでLazy<T>自体はロードされるだろ
2020/02/26(水) 18:42:00.84ID:sMj0eedP0
シングルトンじゃなく
シングルトン的な発想が有用なケースって確かに書いてるね
2020/02/26(水) 18:50:11.01ID:uSMym8r00
>>77
シングルトンの最大の特徴は、複数のクラスから一つのインスタンスを参照できることだから
それはシングルトン的なものでもない

>>75
シングルトンではSIngletonクラスの内部にたった一つのインスタンスがプライベートで格納されている
それをSingletonのスタティックメソッドやスタティックプロパティーで参照するのがGOFのデザパタだ
79デフォルトの名無しさん (ワッチョイ 9e2d-9Aak)
垢版 |
2020/02/26(水) 19:43:16.15ID:JBdLkQQ40
シングルトンって、昔は、複数インスタンスが作られる可能性を潰すためにやってたんだろうけどさ
今は、主にDIコンテナへの指示みたいなもんとして役立ってんじゃねえのか?
2020/02/26(水) 20:21:07.70ID:J/Z+GoCJM
DIコンテナ使ってるなら、DIコンテナが自動的にインスタンス化して単一のインスタンスを各所へ注入してくれるから、
GoFのシングルトンパターン(というかグローバルインスタンスアンチパターンとでも呼ぶべきもの)は全く必要ないよ
81デフォルトの名無しさん (ワッチョイ 9e2d-9Aak)
垢版 |
2020/02/26(水) 21:07:30.64ID:JBdLkQQ40
単一かどうかはコンテナへの突っ込み具合で違ってくるんじゃないの
シングルトンでって指定していなければ複数インスタンス化されちゃうでしょう
2020/02/26(水) 21:12:48.10ID:pSd33gsra
属性などで指定するだけだよ
2020/02/27(木) 08:46:08.57ID:LiuiNLxS0
>>77
グローバル変数を単にフォームにおいてアクセス制御しただけで次とほぼ変わらないな
staticでいいじゃん側の話に思える

private static Form2 _form;
public static Form2 Hoge{
get{
if(_form == null || _form.IsDisposed)_form ==new Form2();
return _form;
}
}
2020/02/27(木) 08:57:22.75ID:/W1ksVR5p
もうめんどくせえからstaticも中でシングルトン使ってるから
実質シングルトンパターンって事でいいよ
85デフォルトの名無しさん (アウアウウー Sa2f-A7eh)
垢版 |
2020/02/27(木) 12:49:09.42ID:ENhVujQ1a
日本人はすぐそういう党派的(どっちの側にお前はつくんだ?}で幼稚な話になるよねw

>>83
そういう話じゃないってw
>>70のコードびShowSingletonというメソッドはもちろんForm2以外のクラスに
書くことも出来るけど、それが分かりやすいですか?

こういう話だから。

シングルトンがあんまり有用じゃないとしても、
「唯一のオブジェクトを管理したり窓口になったりする役割をそのクラス自身に持たせる」
というシングルトン的なアイデアは応用できる、と言ってるんだけど、
これがそんなに難しい話かなw
2020/02/27(木) 17:27:49.50ID:0jrc+WC1r
そのアイデアを実現する手法としてstaticはどうだって話してたんじゃないないのか
2020/02/27(木) 19:49:51.32ID:6N44UBOdM
>>85
日本人はーっていうのも相当アホっぽいけどなw
外人だってエディタとかLinux vs. BSDとか宗教戦争しまくり
てか中東の内戦なんてガチの宗教戦争だし
2020/02/27(木) 20:14:51.21ID:NGAf+NLq0
うっかり2つ作らせない方法だからな
89デフォルトの名無しさん (アウアウウー Sa2f-A7eh)
垢版 |
2020/02/27(木) 22:15:47.05ID:ENhVujQ1a
>>87
日本人と欧米人の論争の仕方の違いは明らかで、
それは別に俺のオリジナルの見解でも何でもないよw

今のこの話なら、日本人のダメなところは「シングルトンパターンの利点はここで問題点はここで」
という議論が苦手なこと。
日本人は一度決めた「立場」に固執して全肯定か全否定かになりやすい。
好き嫌いを持ち込むべきでない評価に好き嫌いを持ち込みがち。
エディターとかはいいんよ別に好き嫌いで語れば。技術的な話はおかしいでしょ。

板違いだからもう止めるけどね。
2020/02/27(木) 22:46:12.99ID:RMeeA8fN0
>>89
> 今のこの話なら、日本人のダメなところは「シングルトンパターンの利点はここで問題点はここで」
> という議論が苦手なこと。
それでどちらかに決まるなら宗教戦争なんてすぐに解決してるよw
そもそも技術的な話とか言うわりには
> それが分かりやすいですか?
なんて人によって意見が違うことを言い出すから戦争はいつまで経っても終わらないわけで…
2020/02/27(木) 23:52:28.63ID:NGAf+NLq0
>>89
まあ、外人ならってのは幻想だな
そもそも奴らがそんなに頭が良かったのならオブジェクト指向なんて流行ってない

リーナスが言ったようにオブジェクト指向はカルトだ
誰もメリットなんて説明できない
それでも海を超えて日本へ来たのさ
92デフォルトの名無しさん (アウアウウー Sa2f-A7eh)
垢版 |
2020/02/28(金) 00:58:28.47ID:W4dF7kHwa
>>90-91
なんか党派的主張のお手本みたいなレスで何だかなあという気持ちになるけど
言っても無駄だねたぶんw
2020/02/28(金) 06:43:53.39ID:lgmUZMDZ0
>>92
技術的なお話とか言う割には
> なんか党派的主張のお手本みたいなレスで何だかなあという気持ちになるけど
みたいなレスしかできない時点で…
94デフォルトの名無しさん (ワッチョイ 4a63-ZWRU)
垢版 |
2020/02/28(金) 09:46:17.62ID:JX0D/Sej0
いつもいつも同じ流れでよく飽きないですねカスども
2020/02/28(金) 14:13:28.76ID:zv3KdV1x0
シングルトン的なものが必要になったら、殆どはDIのインジェクションでなんとかするけど
コレクションの要素にインジェクションなんて鬱陶しいから普通のシングルトンやStatic Class使ったりするな
2020/02/28(金) 16:17:34.85ID:5jfHvjE1d
シングルトンに依存するコレクションのエレメントとかちょっと悪夢だな。
97デフォルトの名無しさん (ワッチョイ cb4f-/wOo)
垢版 |
2020/03/01(日) 05:50:05.37ID:wVHwYgLC0
これが最新ぽいな
2020/03/01(日) 07:54:47.18ID:cyJFDbBK0
42 デフォルトの名無しさん  2020/03/01(日) 05:43:23.78 ID:wVHwYgLC
なんだ?この糞スレ
と思ったら2016年だとwww
どこから引っ張り出したんだよ
99デフォルトの名無しさん (ワッチョイ 679b-DFeu)
垢版 |
2020/03/02(月) 10:29:43.95ID:NX3+Q9hq0
C#というより.NET Framework全般の問題かもしれませんが・・・
ビルドした実行ファイルの拡張子を7zにして開けると
   .rsrc(フォルダ)
   .text
   .reloc
というファイルが出てきます

このうち「.text」をエディタで開けると

「C:\Users\ユーザー名\source\repos\プロジェクト名\obj\Release\実行ファイル名.pdb」

の文字列がそのまま入っておりユーザー名まで見えてしまいます

プロジェクトのプロパティなど見てみましたが該当する文字列は設定されていませんでした

この文字列が入らないようにビルドするにはどうすれば良いでしょうか?
2020/03/02(月) 10:31:50.59ID:++2P6Dav0
mtawmg
2020/03/02(月) 10:56:03.68ID:dv6bLfIQ0
プロジェクトのプロパティでデバッグ情報の出力を「なし」か「埋め込み」にする
なしの場合はデバッグが難しいから頒布する用のリリースビルドだけにした方が良い
102デフォルトの名無しさん (アウウィフ FF2f-X91k)
垢版 |
2020/03/02(月) 11:01:21.30ID:glnmwhpKF
ググっただけですぐ出て来たが
https://www.atmarkit.co.jp/fdotnet/dotnettips/831stoppdbfile/stoppdbfile.html
http://var.blog.jp/archives/70196817.html
https://qiita.com/lainzero/items/27681ddc96638e33758b
103デフォルトの名無しさん (ワッチョイ 679b-DFeu)
垢版 |
2020/03/02(月) 11:30:46.56ID:NX3+Q9hq0
>>101-102

ありがとうございました。
pdbファイルがなんなのか理解できました
2020/03/04(水) 15:33:24.81ID:WNB6X6E30
yield returnの挙動について知りたいのですが、
例えばHuman[]からある苗字のHumanインスタンスだけを列挙する場合、
yield returnで貰えば新たな配列は生成されないという理解で良いんでしょうか?(無駄なヒープの生成なども無いと)
2020/03/04(水) 15:41:47.96ID:VYRn8ATr0
配列は生成されないけどIEnumerable<T>/IEnumerator<T>の実体クラスのインスタンスは作られるよ
具体的にどんなクラスになるかはildasm.exeとかで確認してみるといいよ
2020/03/04(水) 20:59:26.02ID:i/lDlkx00
var a = new int[10];
for(......){
......
}

for(......){
var a = new int[10];
......
}

配列変数の場合はどちらの書き方が正しいでしょうか?
下のほうはループを繰り返す毎に配列を宣言してるので無駄だと思うのですが
2020/03/04(水) 21:02:11.58ID:O/qwuvY6M
>>106
意味が違うからどっちが正しいもクソもない
2020/03/04(水) 21:03:35.42ID:nSjoZipw0
......の内容が大事だよなw
109デフォルトの名無しさん (ワッチョイ 4b35-odL1)
垢版 |
2020/03/04(水) 21:18:09.87ID:vFPRvz7l0
>>106
どっちが正しいかは何をしたいかによる
110デフォルトの名無しさん (ワッチョイ 4b2d-hds7)
垢版 |
2020/03/04(水) 22:58:57.68ID:Mg+OXMHj0
始めたばっかの頃の自分を思い出すと、おそらく>>106がやりたいのはこれ

int[10] a;
for(......){
a = new int[10];
......
}
2020/03/04(水) 23:03:21.69ID:w6hLhDKv0
全然違うと思う
2020/03/05(木) 02:53:17.71ID:FOFXma0P0
>>106
後者はループ処理毎にaが初期化されるが
前者はループ処理毎にaは初期化されない
って違いがあるので、バグが発生しにくいのは後者で
バグは発生しやすいけど効率がいいのが前者

前のループのaを使わないなら、どちらも正しいよ
2020/03/05(木) 09:03:52.56ID:Zalo0Xqn0
for内部で毎回一時バッファが必要ならfor内に書くべきだけど、ループ枚に配列生成は高コストなのでstackalloc使って良いと思うけどな

unsafe for ()
{
var a = stackalloc int[10]; //配列サイズが[200000]ほど以上になるとスタックオーバーフローの恐れが出てくるので注意
a[0] = 123;
}
2020/03/05(木) 09:55:29.22ID:C+Zq+iEs0
>>110
それ106と全く同じ事だよ
予め配列変数を用意しておいたところで参照型である配列の変数なんてあくまでポインタに過ぎず肝心の中身はnew毎に生成されるからコスト的には全く変わらない
2020/03/05(木) 10:13:49.21ID:sz7+iaAj0
言語ではなくて設計のことなのですが、C#でデスクトップアプリを作っていて、canvasに描画する処理を書いてます
そこで、描画部分で状態の更新(例えばlabelで表示する値の計算)を一緒にやった方が負荷が減らせるなと思ったのですがこれは設計としていいのでしょうか?
描画部分は複雑になっていくので、そこにcanvasの描画に関係ない処理を持ってくるのはどうなのかと悩んでます
でも一連の処理で共通部分があるので出来る限り負荷を減らしたいです
canvasの描画とその他の更新でうまく分けた方がいいでしょうか
2020/03/05(木) 10:16:15.59ID:4EDBtik+a
>>113
悪いけど、それは全く意味ないと思うよ
ループ内で配列を生成する必要があるとしたら、それを他の非同期なメソッドなどに渡していて毎回インスタンスを別にしなければならないケースだろう
stackallocだと領域が結局使い回されてしまうから、それでいいんだったら単純に最初にnewした配列をループ内で毎回クリアして使えばよい
2020/03/05(木) 10:28:10.79ID:9nI/lMlHM
>>115
描画処理は今の状態のスナップショットを画面に反映させるだけなんだろ?
そんなもん状態の更新処理と何をどう共有するんだよ
分けるかどうかは別にして、そんな頭がごっちゃになった状態で書かれたコードなんて俺は読みたくないな
2020/03/05(木) 10:30:44.90ID:e30M4A2z0
>>116
ループ内で生成しないやり方と迷ってるってことはret時にもループ内でも他に渡す盤面は無いってことじゃないかな
なので最高のやり方はSpan<int> a = stackalloc int[10]として最初に確保をしてループ毎にa.Clear()
>>113のやり方も悪くは無いけど使いまわせるのに毎回stackallocするのは無駄
2020/03/05(木) 11:02:10.43ID:sz7+iaAj0
>>117
すみません誤解を招く書き方でした
状態の更新ではなくviewの更新です
viewで表示する値を計算するのに一連の処理が必要ということです
改めて考えてみたら元のデータは頻繁に変わるものではないのでメモ化で対処できそうです
2020/03/05(木) 15:17:30.80ID:X7H8oXB10
自分で使う用のWindows用WinFormsくらいしか作らない俺もSpan利用したいんだけど、そろそろ.NetCore3.1インスコしてええの?
CoreのWinFormsは不完全みたいな事どっかで聞いたからもうかれこれ1年以上.Net Framework4.7.2しか使ってないんだけど
2020/03/06(金) 12:20:46.76ID:H9scC1320
System.Memoryパッケージ入れれば、slow spanになるけど.NET FrameworkでもSpan<T>が使える
2020/03/06(金) 12:24:09.85ID:7SrrBNmuM
SpanならnugetからSystem.Memoryを入れればNET47でも使えるんじゃ?
2020/03/06(金) 12:24:46.59ID:7SrrBNmuM
あ、かぶった
124デフォルトの名無しさん (ワッチョイ 4f7c-kMfZ)
垢版 |
2020/03/10(火) 13:54:33.08ID:Xb+4Rppb0
Hoge[] h = new Hoge[]{...};
ArraySegment<Hoge> slice_of_h = new ArraySegment<Hoge>(h, a, b);
Hoge[] new_instance = slice_of_h.ToArray();
125デフォルトの名無しさん (ラクッペペ MMe6-0jaE)
垢版 |
2020/03/11(水) 20:14:38.79ID:Atur+UVNM
FormアプリケーションのGUIをそのままWebサイトにできますか?
126デフォルトの名無しさん (ワッチョイ 0263-Xa2H)
垢版 |
2020/03/11(水) 20:15:50.74ID:JtvZFGdC0
無理
127デフォルトの名無しさん (ワイーワ2 FFca-cUsN)
垢版 |
2020/03/12(木) 13:35:24.24ID:MzPDqAwNF
https://docs.microsoft.com/ja-jp/archive/msdn-magazine/2017/september/net-standard-demystifying-net-core-and-net-standard
2020/03/12(木) 14:08:08.81ID:jMpYX7Pla
>>127
懐かしい話だな
.NET Standard はあろうことか 2.1 で .NET Framework を切り捨てたから、もはや .NET Standard には何の意味もなくなり事実上消滅したよ
2020/03/12(木) 14:19:52.98ID:GlTl0MmId
まだ消滅してないよ
130デフォルトの名無しさん (ワッチョイ 51da-cUsN)
垢版 |
2020/03/12(木) 14:40:04.55ID:dkoVUBxw0
どれがホント?
https://blog.ecbeing.tech/entry/2019/03/28/181956
https://blog.hiros-dot.net/?p=9086
2020/03/12(木) 15:00:48.26ID:jMpYX7Pla
>>130
下の方は誤解を招く書き方(というか本人が理解してなさそう)だね
.NET5は.NET CoreとXamarinの新バージョンを含むが、.NET Frameworkは含まない
.NET Frameworkは4.xが最後のバージョンとなり、(Xamarinを除けば).NET Coreへ一本化される
2020/03/12(木) 20:38:24.41ID:RlMroztpr
> Xamarin は、テクノロジー自体は、.NET Framework と C# を基盤としていますが、
> Mono というライブラリを使用します
2020/03/12(木) 23:53:50.67ID:jAjbL2IrM
>>132
それは明確に間違いだね
Monoは元々MSとは無関係の会社による.NET Frameworkの非公式かつ独自な互換実装で、.NET Frameworkとはソースを共有していない
based on かなんかを誤訳したんじゃね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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