ふらっと C#,C♯,C#(初心者用) Part150
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
http://mevius.5ch.net/test/read.cgi/tech/1608085775/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
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/
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
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured なんとなくエスパーすると、開発ソフトをインストールさえすれば、その後はネット非接続で何でも開発出来る環境が理想ってこと?
なら、たぶん無い。
.net sdk使って、標準ライブラリだけ使うなら出来るんかな?
結局必要なライブラリやらランタイムをDLするか、他のPCでDLして開発PCに入れる事になりそうだけど。 >>258
待て待て、標準ライブラリだけでもオフラインで開発できるなら、回答しては「Yes」じゃないか?
特に、その「他のPCでDLして開発PCに入れる事になりそうだけど」が出来るんだしさ
>>255
目的を話せ
俺のエスパー能力をフル発揮すると、
セキュリティ上、スタンドアローンで動かさんといかんPCがあって、そこで開発したいだよな? >>258
ありがとうございます!!!
環境を自分で作る以外ないんですかね。無謀すぎますね。
コンパイラ作るわけじゃないですからね統合環境は。
>>259
そうそう単にセキュリティの心配です。
オフラインだと全く外部に漏れる心配ないわけじゃないですか。
めちゃくちゃ安心するじゃないですか。
何でインターネットに繋いでないとプログラミング環境が整わないような
状況なんでしょうか?どう考えたってオフラインのほうがよくないですか? そういうセキュリティの気にし方をするのであれば、普段使いのPCとは別に
個人情報を一切入れないPCを1台用意して開発勉強専用にするのが一番安心できると思うよ
外に漏れて困るようなレベルのコードを書くならダメだけどさ
というかMicrosoftDocsやGitHubやStackOverflow/Qiitaとか一切閲覧できない環境で
NuGetやNPMに登録されてる出来合いのライブラリもまったく利用しない縛りを入れて
自分の能力だけで1から100までコードを書けるなんてすごいなあ
俺にはそんな縛りプレイしてたらとてもじゃないけど開発にならないや インターネットにつながっていないが故に管理がおろそかになってパッチ適用がされない弊害の方がやっかい
日立のランサムウェアなんかはまさにそれ 構造体(値型)を関数の参照渡し以外で、参照する方法ってありますでしょうか?
配列の構造体にアクセスするコードを書いているのですが、
逐一配列の添字計算が入るのも嫌なので避けたいと思っています。
添字の数は関数の中では変わりません。
今は関数の参照渡しで使っていますが、他に方法は無いのかなと思いまして。 >>264
策士策に溺れてはいけない
愚直に一時変数を使いましょう >>265
ref ってローカル変数に使えるんですね!
前に軽く試した時には右辺値にしかrefを記載してなかったので、
左辺の定義にもrefを記載すれば行けました。
有難うございました! オフライン環境での開発だけど、
VS Community2019のオフラインインストーラをダウンロードして
オフライン環境に持ち込んで使ってる
c#でフォームのデスクトップアプリしか作らんので特に困ってない >>270
バグや脆弱性対応は?VS2019って頻繁に更新されてるけど >>273
offlineインストーラーも知らないのは開発者としてどうかと思う getsetプロパティをFuncで呼び出せるようにしたいのですが可能でしょうか?
メソッドで括って呼び出せば良いのだろうけど直接Funcに入れる方法があるならそうしたいです よく分からん
Func<string> func = () => person.Name;
を
Func<string> func = person.Name;
みたいに書きたいってことか? 無理だけど
func = person.Name.Surname;
のときperson.Nameがいつ解決されるのか判断つかないし >>276
返信ありがとうございます
イメージとしては複数のクラスで
public bool hoge {set => test = value; }
が複数あって
List<Func<bool, bool>> func;
に追加していってキャンセルとか何らかの処理後に一括して戻したい、と言うような処理です
やはりプロパティってメソッドみたくできないFuncに入れる事ができないんでしょうか
他の方法ですっきりする方法はないですかね? やりたいことがさっぱりわからんな
ダイアログのキャンセル押したら画面ごと破棄でいいじゃん >>277
List<Action<bool>> list;
list.Add(b => hoge = b);
こういうこと? まあ気持ちはわかる
(Webでなく)GUIアプリで独学した初心者って、エンティティオブジェクトをアプリ全体で生存させるような設計をしちゃうんだよな
オブジェクト指向を普通に解釈すりゃそれが自然なんだけど、実際そういう設計はしないんだよ
ドメインモデルだろうとトランザクションスクリプトだろうと、エンティティはトランザクション毎に作る >>274
知らないって決めつけてるのはどうかと思う
単にどうしてるのか聞いているだけ >>278破棄と生成できれば良いのですがちょっと難しい。ユーザーコントロールでバインドしていて各コントロールは値を参照しあってます
今回は画面が切り替わったときに表示非表示を変える戻す、なので直接は関係ないのですが影響度を減らしたい
>>279
>>276見直してプロパティを直接でなくてもラムダ式でいけそうなことに気付き>>279さんの形を思い浮かびました、今出掛けてるので確認は後ですが多分解決できそうです
皆様ありがとうございます
解決しなければまた聞くかもです
ありがとうございます これあれじゃね?
開始日と終了日に期間制限があると値が設定できないやつ(笑) 何がしたいのかよく分からないね。
キャンセル要求が発生したら初期状態に戻したいなら
素直に初期状態をまるごとキャッシュしておく方が分かりやすいんじゃないかと思うけど
もっと素直なのはそもそもApplyするまでUIの値をモデルに反映しないことだよね。
まあたぶん要件を説明しきれてないんだろうけど >>282
元に戻す処理を管理したほうがいいケースなのか
元の状態を管理したほうがいいケースなのかを考えたほうがいいよ まあ、設定画面がモードレスでリアルタイムで値を変えたいときもあるかもしれんが
それやると
地獄の一丁目にご招待って感じ(笑) >>288
更にundo/redoの機能を付けてくれまいか?
で更なる深淵へw >>290
影響する値でエラーが出てもそれとは関係ない表示はできる限り続けて欲しい(プレビューが見えないから)
エラーが出てるときは値の変更で表示は変わっても最後の反映はできないようにしてほしい
でも値を変更してる最中のundo,redoは効くようにして欲しい
って割とありがち要求だよね
モードレスやった時点で地獄を覚悟しろって感じ >>283
めんどくさいのに本当にしてるのか気になったから聞いたんだけど何かおかしい? うちにも本当にしてる端末はあるぞ。
むしろ自動で上げたくないしな。
既知の問題でワークアラウンドがあるならそれで良いというケースもあるし。
リリースノートめちゃくちゃ読む。 >>293
ネットに繋げないならそうするしかないし言うほど面倒でもないだろ
そもそもネットに繋いでる場合でもアップデートがある度に適用なんてしないよ
>>294が書いてるように修正内容見て影響ないとかワークアラウンドがあるなら適用しない オフラインがめんどうとか何言ってんの?開発する時にはセキュリティ上当然やろ
オンラインとか最近の開発ではありえない 今のVSって最新メジャーバージョンは完全に人柱向けだからなあ
アップデートをすぐに入れられないような環境だと詰む可能性があるからむしろリスクが大きい
最新版を追えない環境なら2017使ったほうがいいよ >>298
中身読めよ
2017の方は脆弱性修正と軽微なバグ修正しかやってない C#を勉強中です
Delegateの機能はわかったのですが、これはどのような状況で使うのか思いつきません
こう使うと便利だという例を教えてください delegateの機能が解説されていた箇所に書いてなかったの?書いてあったけどそれを理解できないってこと? >>301
そのわかったというDelegateの機能を説明してみてもらってもいい? >>301
真面目な話、無理に今理解しようとしなくていいと思うよ。
コード書き出ぜば自然に分かる。
後回しにして先に進んだ方が吉。 >>303
機能の解説だけでどのようなときに使うかは書いてなかったです
Delegate型の説明と作り方の後に例としてConsole.WriteLineでHelloと表示するメソッドを
新たに作ったDelegate型のaという変数に突っ込んでa()を実行して
ほら表示できたでしょという感じだったのだけれど
だからどうしたとしか思わなかったです 自分も変数のシャドーイングとか何が便利なのかわからないです
脳みそのメモリ圧迫されるのでは >>308
これがdelegateだとしたら意識しないで使ってました
まさかこれが.. デリゲートは自分で使うもんじゃないと思ってた。
Buttonをクリックしたら、このメソッド実行してねってのを、IDEが作ってくれる奴だから。
だから、「こんなときどうしよう」って悩んだときに、
そうだ!デレゲートってのがあるんだよ!っていう、よっぽどの場合に、入門書を読めば良いと思う。
初めてのC#みたいな本がお薦めなんだけどね。 >>306
試しにhello2 からhello100まで突っ込んでみよう まあこういうものが腹に落ちるようになるのが楽しいとこでもある 例えば、Ruby では、Forwardable でインスタンス変数に委譲できる
自分で配列クラスから、Stack を作って、その内のpush, pop だけを使いたい場合、
もし配列を継承・is-a すると、余計なメソッドまで継承してしまうので、それらを使いたくない。
そういう場合に、委譲・has-a で、インスタンス変数に委譲して、使うメソッドも限定できる
Go, Elixir も継承がない、委譲だけ。
継承は大掛かり。
使わないメソッドを呼ばれてしまう可能性があるから
また、誰でも使うような、String クラスなどを継承して、メソッドを追加されるのも嫌。
そういう継承は想定外だから
素人は、よくそういう事をする。
継承用のクラスじゃないのに継承したりする
require 'forwardable'
class Stack
extend Forwardable
def initialize( ) @ary = [ ] end
def_delegators( :@ary, :push, :pop )
end
stack = Stack.new
stack.push 1
stack.push 2
stack.pop
p stack #=> #<Stack: @ary=[1]> >>307
shadowing とは、内外の変数は、別々の扱いで、
内側のスコープに入ると、内側が優先されて、
外側の同じ変数名が隠されること。
その際、外側の変数には影響を与えない。
Ruby では、外側のa は10で、内側のブロックスコープでは、
同名の変数aを使っても、外側の変数には影響を与えない。
ブロックスコープを抜けると、aは10のまま
a = 10
ary = [ 1, 2 ]
ary.each do |a|
puts "ブロック内: #{ a }"
end
p a
出力
ブロック内: 1
ブロック内: 2
10 なにかのネタというかエンジニアジョークなのかな? わからないや
シャドーイングがどんな機能なのかは単純だからわかってるつもりだけど、一見同じ変数名を扱えることで何が嬉しいの?って話です
コード読んでて混乱しそうなので無い方が綺麗だと思うのだが、自分の脳みそが貧弱なだけかな? c から来た人なんだけど、デリゲートって関数ポインターの認識 >>322
それがリストになっているので
複数の呼び出しを一気に行える。
という感じ >>321
嬉しいでしょ。
まあぶっちゃけフィールドをローカル変数で隠蔽することはあまりないと思うけどね。
>>322
Cより機械語レベルで考えた方が分かりやすいね。
要はcall命令のオペランドだよね
厳密にはthisポインタの情報を含むから違うんだろうけど概念的には 初歩的な質問ですいません
オブジェクト初期化子とコンストラクタは何が違うんでしょうか?
やってることは同じのように感じるのですが… >>324
デリケートって追加や削除されるたびに全リストコピーしてるんだっけ?
ぶっちゃけ効率考えたらデリケートよりインターフェースをリストで持たせた方が効率はいいよね >>327
初期化子は参照側が任意に行う。代入しか出来ない。
コンストラクタはオブジェクト側が初期化のルールを決めて、ロジックが書ける。
ってことじゃないのかな。 >>327
コンストラクタにはそのオブェクトを生成するために必要なものを渡してる
初期化子は特に生成には関係ないない項目にも初期値を設定してるイメージ
使う側はあまり気にしなくていいけど用意する側は意識しといた方がいいよ >>327
初期化子はフィールド単体に対しての初期化で、コンストラクタはクラス全体に対しての初期化って考えたらイメージしやすいかも
まあ、初期化子を指定しない場合でも、def aultで初期化されるんだけどね >>327
そもそも問題設定が間違っていると思うよ。
正しい問題設定は「オブジェクト初期化子って何?」
オブジェクト初期化子とは、コンストラクタ呼び出しと、複数の任意のプロパティーやフィールドへの
値の設定をインラインで書けるようにした糖衣構文。 >>326
実を言うとnull safetyのせいで隠蔽したくなるんだな
もちろん、別の名前つければいいけど C#に限らずnull safetyの言語で、特にビューモデルのクラスでnullableなフィールドを宣言する機会が多いいんだが、
フィールドはメソッド内でnullチェックしても非nullableに昇格しない(kotlinでいうスマートキャストが効かない)
から、
if (field == null)
throw new IllegalState
var field = field!; // わざわざnon nullableなローカル変数に代入で、ローカル変数に適当な名前が思い付かないのでフィールド名と同じ名前で隠蔽 メソッド内で1,2回とか参照しないのであればわざわざnon nullableなローカル変数に代入しないが
特にkotlinとかスコープ演算子とかもあるがkotlinは「!!」と二重だからこれがいっぱい現れるとソースが見苦しい... >>333
違うだろ。C#ならフィールドとプロパティをきちんと区別しないといかん。 x = a ?? b; ←null合体演算子
x.?method() ←これなんて言うんだっけ? ピリオドとクエスチョンの位置逆だけどnull条件演算子 linuxとwindowsで動くguiソフト作りたいんですが、共通の開発環境と言語ってあるでしょうか?
openglを扱ってみたいのですが、c++とqtが多いんでしょうか?
c++を扱うと思うので、erectronやwxpythonなどは除外されるんでしょうかね。 >>341
C++の話をするのに何故C#のスレに来たの? >>339
逆にnullだったらそのままにしたいってことが多いんだけどそういう演算子ないよね
int? x = null;
int? 2x = (x == null ) ? null : (2 * x);
みたいな opengl関係無いアプリも作りたいので(´・ω・`)
c#は恐らくlinuxでは動かないものですよね >>343
nullだったらメソッドやプロパティにアクセスせずnullを返すのがnull条件演算子(?.)
そのint?のケースは単に`2 * x`でnullが返されるようになってる >>344
Unityならwindowsでもlinuxでも動くはず .NET MAUIがそういうの目指してるんだろうけれど… >>347
unityをguiアプリ開発に使いませんよね 普通 >>345
条件演算子を使えないパターンの例をあげたつもりだったんだけどそういう動作すんのか
x.method()に対応するならmethod(x);にも対応してくれてもいいのにって思った >>350
monoやxamarinはc#ですよね。
c#製アプリはlinuxで動かないと効かされていましたが。
あと、openglなので、c++ではないですか? ■ このスレッドは過去ログ倉庫に格納されています