C#, C♯, C#相談室 Part97
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured そもそもC#のスレだからすれ違いだがw
printf("%sの番です\n", player == 1 ? "●" : "〇");
をifの前にするとか(それぞれにあるから冗長)
プレイヤーの処理もPlayerXpos()とかに出すとかすれば良いのでは? Shift-JISの文字列をutr-8に簡単に変換する方法ってありますか?
やはり一度Stream(バイナリ)に変換する必要があるのでしょうか >>94
streamじゃなくてbyte[]じゃないの
Encoding.GetString(Encoding.GetBytes(string))ってことだよね
何のためにそんなことするか知らんけど >>95
つまりstringの状態でencodingは可能なのですか? C#でRestAPIを投げてブラウザ側から貰ってくる文字列はShift-JISらしい
それでC#はutr-8で表記されるため変換(Encoding)が必要になるのです unicodeは符号化方式など規格とそのコード群の名前 そのREST APIをどうやって呼び出してるのか知らんけど
真っ当なサーバならContent-Typeにcharset設定してて
一般的なライブラリなら文字列として読み取るときにcharset参照して適切に文字列型に変換してくれる
から特にプログラマが考えることはない
これらの前提が崩れてるなら文字列として読み取るんじゃなくてバイト配列として読み取って
System.Text.Encodingクラスを使ってバイト配列をstringに変換する必要がある
この場合変換先の符号化形式を考える必要はなくてShift_JISをstringに変換することだけ考えればいい
もしライブラリの都合でstringとして受け取ることしかできなくて
かつその時点で文字化けが出るようなら
それはもうどうしようもないので使うライブラリを変える必要がある sjis/CP932 とか、何十年前の話w
sjisのサイトも、5ch だけだろw 古の生き残りのサイトもsjis
chromeが文字コード判定ミスしてても今は手動で文字コードは変えられない 手動で文字コードを変更できる、Chrome の拡張機能は無いの? win32APiのChangeDisplaySettingsExをC#から呼び出して、
モニタのポジションを変更してるんだけど、
変更直後にScreenのBoundsから値をとっても値が変化しない・・・
アプリ再起動するとちゃんと変わってる。
ディスプレイの設定ってレジストリに保存してるから、もしかして
アプリ再起動しないとScreenクラスのBounds反映されない?
アプリ再起動せずになんとかする方法ないですかね? Screenオブジェクトフィールドに保存してたりする?
毎回Screen.AllScreensとか.PrimaryScreenとかから取得すればどう?
ところでSystemEvents.DisplaySettingsChangedイベントは発生してる? 2つのクラスを1つのクラスに合体させて使いたいんだけど、どうやるのがスマートですか?
多重継承ができたら良かったんですが… そういうのは大体気の迷いだから、落ち着いて全体から考え直せば むしろ機能単位で分解するのが健全な方向なのに
違う機能を似たものだから合体とかわりと誤った方向に行く人かな? ライオンクラスと山羊クラスと蛇クラスを一つにしたいんです >>113
コンパイル時に型チェックしたいなら既存の型をインターフェースで定義し直して呼び出し側も修正
でもこういう変更が必要な状況はほとんどないのでコンポジションで移譲するケースなんじゃないかな
>>117
トレイトでもインターフェースでも同じだよ >>114
BindableBaseと他のクラスを両方継承したい場面はいくつかあるな
ソースコードジェネレータは中々いい >>119
トレイトはフィールドを持てるから同じではないけど言いたいことはわかる 質問内容はクラスをまとめたいってことなので、ずれちゃう話にはなるけどさあ
(フレームワーク等を使う場面を除いて)初心者中級者のうちにクラスを継承をしようと思ったら設計段階でおかしいので、正解はどうするべきなのかを聞いた方がいいんじゃないのかな クラスインスタンスを取り込めばいいのに
なんで継承にこだわる? やりたいことは
いくつかのプロパティを持つデータを格納するだけのクラスAがある
クラスAにバインド用のプロパティをいくつか追加したクラスBを作って、それのリストをDataViewにバインドしたい
AとBのすべてのプロパティを書いたクラスCを作ればできるけど、なんとかして少ないコードで実現したいです >クラスAにバインド用のプロパティをいくつか追加したクラスB
>AとBのすべてのプロパティを書いたクラスC
なんかおかしくない? Aを継承してバインド用のプロパティを追加したBを作って
List<B>を持つCを作ってそのList<B>をバインドすればいいんじゃないの >>127
それで出来るんですが、バインド用のプロパティが沢山あったときに毎回書くのが面倒で、どうにかして効率化できないか考えてます ここですら見かけない超クソ黒魔法もあるけど全くお勧めしない
普通にコンポジションで書くのが正解じゃないかな
アンマネージドなものをラップするのと変わらない
手書きでも自作コードジェネレータでもどうぞ やりたい事は理解できる
構造体を合体させるにあたりフィールドで保持すれば良いというのはその通りなんだがアクセス手段が冗長になるのは嫌っていうワガママな気分によくなる
C++のように素直に構造体継承や多重継承認めてくれって思う事は頻繁にある >>128
バインド用のプロパティってクラスAのもつフィールドを参照するの? >>133
しない前提です。
データソースクラスにバインド用のプロパティも含めれば実現できるけど、クラス設計として微妙なんだよな >>134
>>125が正解な気がするが、
そもそもバインド用のプロパティってどういうものを想定してるんだ?
よくあるINotifyPropertyChanged自動実装したいとかそんな話か? つまるところ、M(クラスA)とVM(クラスB)を煩雑にならないように扱いたいって話かね
この辺は詳しくないけどいろいろプラクティスがあるんじゃない? そんなアホなことしたがるやつがそもそもいないからな
することが多ければすぐに楽な構文が作られるのがC# C#は基本的に
・static寄せ集めユーティリティのクラス
・必要な画面フォームのクラス
・メインプログラムのクラス
この3つ以外要らないのだよ
意識高い系が説くMやらVに振り回されてはいけないのだよ
変な抽象化は問題をややこしくするだけだと学ぼう >>135
そうですね
INotifyPropertyChangedとかINotifyDataErrorInfoを実装しておきたい感じです 探せば大抵のものはあるのに、自分で作る意味とは?
アートとか、そういう方面しか残ってないような感じがするのですが(´・ω・`) 帳面で効率が悪けりゃソフト使えばいいし効率の良いソフトがみつからなけりゃ作るより他にないだろ >>141
ただのViewModelじゃねーか
フレームワーク使え 最近MVVMのほうが楽じゃね?って思ってきた
楽しいし これもすべてソースジェネレーターのおかげかもしれん
さすがC# >>139
うちがWindowsの業務クライアントアプリ系を委託してるソフトハウスがまさにこんな感じだわ
イベントハンドラからSQL投げてる
ただしstaticユーティリティクラスではなく共通の神フォームクラスがあって、全てのフォームがそれを継承する形
まあレベル低すぎて開発もクソ遅いから、負債自体はそれほど量が多くないのは救いかな >共通の神フォームクラスがあって、全てのフォームがそれを継承する形
こういうのよくないな
神クラスのメンテナが異動だかで居なくなだけで誰も保守できない砂上の楼閣アンチパターンに嵌るね >>149
前に作ったC#のプログラムがまさにそんな感じで、
その後MVVMしてみた。
そして最近作ったCのプログラムが構造体でオブジェクト指向プログラミングしてる。 >>148
その言い方だと基底クラスと派生クラスに分かれているもの全部が当てはまるように聞こえてしまうが 規模じゃなくてメンテナの有無を問題にしていたからだよ ライブラリなんて当時のセット使うに決まってるじゃん 顧客のOSがバージョンアップするのにいつまでも使えるわけねーだろ >>156
使えなくなる理由が分からない
ブラウザの話? >>156
そんなんちゃんと契約書にOSのバージョン指定しとかない会社が悪い
OSバージョンアップされたら何起こるか分からないんだから
最悪作り直しだってあるし、そんなん瑕疵理由にされたらたまらないだろ 指定したバージョンで使えなけりゃ作り直すしかねーだろ >>152
神クラス悪くないよな
すべてのグローバル変数がちゃんと集結してるなら
リークはここさえ調べればいいし 本当にヤバい神クラスというのは担当者が1人じゃなく複数人でメンテしていて、
しかも誰一人として全貌を把握していないという。。。 まあ1人で保守できてて数が把握できるレベルならな。。 ディスプレイ設定の
マルチディスプレイの
複製表示するだとか拡張表示するだとかの設定を
プログラムで取得できますか? そりゃ出来るだろ。
取得するAPIが用意されているかどうかは知らんけど。 >>164
.Netのフレームワーク抜きにして
基本的にwindowsの情報はwin32 apiかwinRtかで取得できる
楽かどうかは不明だけど両方ともC#ではアクセスできる
それ以外にレジストリの情報だけと言う場合もあるけど 思い出というかうろ覚えレベルだけど
昔はwinformsの方でAPIがあって複数画面の情報は取れた
WPFにはAPIが用意されてなかったのでwinformsを参照して情報を取ってた >>166
WMIの存在知っていて、Monitor〇〇は見てみたんですけど、モニタごとの
情報は取得できるけどマルチディスプレイの設定は見当たらないんですよね。
>>167
win32apiも見たんですが、やはりモニタごとの設定は取得できるんですが、
マルチディスプレイの設定みたいなのが見当たらなかったです。 >>169
上の人が書いているけど、レジストリっぽいですね。
DisplaySwitch.exeによる切り替えは結構ヒットするんだけど、情報取得はみつけられなかった。
WindowsAPIだと、
SetDisplayConfig
QueryDisplayConfig
あたりがそれっぽいのかも?
詳しい人の回答を期待w マルチディスプレイの設定って具体的に何よ
最終的に何の項目の値が欲しいのよ
コンパネや設定アプリのこの項目ですとかそういうの書きなさいよ マルチディスプレイの項目の
表示画面を拡張するや、表示画面を複製するが何になってるか取得したいって最初に書いたんだけどな… C言語から入った人間なのでexeファイル=機械語と思いこんでたけど違うんですね……
中間言語?CLR?いやC#もexeファイル作成されるじゃんどういうこっちゃと思ってました
えーっとC#のexeファイルは中間言語で出来てるって理解であってます?つまりexeだけど.net入ってないPCじゃ実行できないってことですよね? ならその画面出してキャプチャして画像解析でもすりゃええやん >>174
C言語から入ったからじゃない
お前が無知なだけ >>176
建設的でなく情報を提供することもない価値のない書き込みをありがとう
でもそういうのやめにしないか? むしろcから入ったほうが、ほかのいわゆる高級言語から入るより詳しくなりそうな気がするんだがな C言語プログラムではexeファイル作成しても実行環境のランタイム周りでエラー吐くと即実行時エラーで停止するからな プログラミン好きじゃないけど、稼ぐ手段と考えたら上達しないんですかね?
ていうか、うまく出来もしないのに好きでいることなんて出来るでしょうか
成果が出て好きになるのでは? 好きとか 嫌いとか最初に言い出したのは誰なのかしら 分からん
好きなことで生きていくみたいな
他人と比べて明らかに下手でも好きでいられるのだろうか >>182
スレ違いどころか板違い
低能すぎるからハロワ行け ここで聞いていいのかわからんけど
WinUI3
Windows App SDK
MAUI
こいつら並行して存在してるみたいだけど関係性ってどうなってんの?
UWPはディスコンになったって理解でいいの? 本当はMSも新しいものにシフトしたいけどWin32は捨てられないし
レガシー無視ならWindowsである必要が無くなるからなぁ
なんやかんやでwebの技術でアプリは作れる時代だし
XAMLなんかはそろそろ辞めた方が良い気がするんだよなぁw