◎正当な理由による書き込みの削除について: 生島英之とみられる方へ:
C#, C♯, C#相談室 Part98 ->画像>1枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1719656321/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
■Visual Studio 2022 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/ ■コードを貼る場合はこちら
http://ideone.com/ ■前スレ
C#, C♯, C#相談室 Part97
http://2chb.net/r/tech/1671585518/ ■次スレは
>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
プロパティって、別クラスからprivateなフィールドにアクセスするためのメソッドという理解であってます?
自分のクラス内で完結するのであれば直接フィールドを操作すればいいですよね?
基本的にはそうだけどちょっとした小細工を仕込みたい場合とかにprivateプロパティという選択肢もなくはない
遅延初期化するものとかね(この用途では今はLazy<T>を使うけど)
フィールドのようにアクセス可能なクラスのインターフェースというかAPIを定義するのがプロパティ
中身は他のメソッド呼び出しの場合もあれば他のプロパティを元にした計算だけ行う場合もある
クラスのユーザーがフィールドにアクセスする必要がなく
継承して拡張する際にもフィールドにアクセスする必要がなく
クラス内からのフィールドアクセス時にも常にチェックすべき事前条件がなければ
privateフィールドを単純にラップするプロパティは基本的に不要
ありがとうございます
もう一点聞きたいんですが、プロパティ自体はアンチパターンではないですよね?
ある本にセッターを使うなら別にメソッド用意しろと書いてありました
理由はクラス外からメンバを操作してはいけないのと、値チェックができなくなるからと
これらは別にプロパティでもできるんで(そもそもプロパティはメソッド)、間違ってますよね?
>>8 >ある本にセッターを使うなら別にメソッド用意しろと書いてありました
状況による
publicなセッターのほうが望ましいケースが稀なのは確か
ぞもそもそれc#の本なのか?
なぜタイトルをぼかす
あれ?.NET CoreだとC++/CLIの1次元array使えない?
実行ファイルのあるフォルダを取得しようとぐぐってためしたらカレントディレクトリを返してくるんだが・・なんか変わった?
取得するコード書いてくれにゃ答えられんよ
あと.NET 5以降なのか.NET Frameworkなのかとか
テキトーな疑問だけ投げて二度と来ない単発荒らしか
>>14は
>>16 寂しがり屋なの?
来てほしかったの?
反応がない=同じ現象に出くわした人がここにはいない、ってことだからここにきても意味ないじゃん
もう返事もらってんだよ、それくらい理解できないの?なさけない
いつからか
こんな限界集落のマ板なんかに変なの居着いた
コンソールアプリで画面を上側へスクロールしたときに文字が表示されません
Console.BufferHeightで行数を増やしているのに、何故か反映されない
Win10では正常に表示されたのに、Win11では表示されない
ググっても出ない中々難しめの質問AIにしたらサンプルコードまで答えてくれやがった
正常動作するかは知らんが
仕様諸々精査してできるかどうかの判断を自動でやってくれるのは楽だわ
回答を検証できる質問でないとハマるよ
それっぽい回答来たから鵜呑みにしてたけど後からハルシネーションだったとわかってガックリ来た
付き合い方を考えないと
vscodeで作成してます。.NETではなく.NET Framework用でコンパイルしたいのですがcsprojをいじればいいんですか?イマイチぐぐっても分かりませんでした…
ターゲットフレームワークを変更する
おそらくNugetの依存関係が壊滅するのでライブラリのバージョン等を頑張って修正
まあ、そのレベルだと素直にVSでプロジェクト作り直した方が確実に早い
>>29 依存関係とか変更とかまったく分からないのでnet48でプロジェクトを作りました
しかしc#が勝手に最新で作り出すのでなんとかしないと…
implicitusingを無効にしたらいけました!
coreCLRの開始イベント使ってねーぞみたいな注意が出ますがとりあえず無視します
だからそんなこともわからんレベルなら
普通のVisualStudio IDE使ってテンプレートから作ってもらえ
.NET Core系用と.NET Framework系用でテンプレート別々にあるぞ
.NET Frameworkで作るのならVS Codeにこだわる意味が分からんな
初心者ならプロジェクト作成以外もVisual Studio使った方が楽じゃないか
初心者以外でもvisual studioでいいのでは?
VS Codeって何のためにあるの?
>>35 自由度の高い拡張機能が作成可能とか?
メリットいかせずに「他人と違ったことする俺すげぇ」ってバカのほうが多い気はする
そして拗れてcsc.exeへ。勉強効率も悪くろくなもの作れなくなるバカの末路
ちなみにどっちも初心者スレで「やり方わかりません教えて」みたいな質問者見たことある
VS CodeはVSがインストール出来ない環境で使うんだよ
maui、xamlとかモリモリ書かないならvscodeで.netは普通にいけると思う。
他のフレワークだとVSCode前提みたいなところがあるから、基本的にコマンド一発でテンプレートやコンフィグ全生成してくれるのが殆どなんだよなー
自分はC#使うのは2〜3割くらいに減ってるから、一旦VSのテンプレートで生成した後にVSCode持ってって作業してる。
別にVSのまま作業しても良いんだけど、他がずっとVSCode使ってるからそのまま殆どなんとなく。
ビルドの設定追い込む時とかはVSに戻って作業する
.NET8に移行しようとしてSystem.Drawing.Commonをnugetで取得して、参照のパッケージのところにもちゃんと入ってるのにビルドするとアセンブリ追加しろやってエラーが出ます
System.Drawing.Commonに限った話じゃないとは思うんですが、nugetしてるはずなのに使えないケースってあります?なんか対処法とかありますかね
nugetのフォルダのsystem.drawing.common.dllを直接追加してみるとエラーが出るし……
>>40 ターゲットOSをWindowsにしなきゃだめになったんじゃなかったっけか
>>41-42 ありがとうございます。解決しました。
プロジェクトじゃなくて、プロジェクトが参照してるライブラリが古くて画像周りがおかしかったことが原因でした……
いやーてっきりプロジェクトに問題があるものだとばかり。
お手数をおかけして申し訳ありませんでした。
string のなかに " いれたいんだができるん?
string x=""+"aaaa"+""
>>44 こういうこと?
string x = "\"+\"aaaa\"+\"";
それでできそうかも。試してみる。
プロセス起動させるとき、引数の変数にパス入れるけどパスの中にスペースがあると
だめなんでそれの回避として " が必要。
だめっぽいな。
aaaaはstring の変数でもってきてる。
string s = "aaaa";
string x = $"\"{s}\"";
System::Diagnostics::Process::Startとかだろ
"\"" + filePath + "\""
Windows君はパスに空白含んでたらバカになるからダブルクォートしないといけないからね
>>44 string x = """aaaa""";
これで
>>47を読んで無かったわww
それなら
>>51でいいか
string x = $"\"{s}\"";
これ採用 TNX!
もうちょっとあれこれ繋げるもんがあるならともかく
たったそれだけにString.Format使う意味ある?
2回以上+で結合すると無駄なアロケートとコピーが発生する
ループしないなら気にする必要ないけど、+に拘るメリットも特にないな
なんかふと気になってILSpyしてみたら
>>55程度だと+連結に置き換えられてて、もう一つ変数増やしたらDefaultInterpolatedStringHandler処理になってたわ
>>58 C#10から実装が変わってかなり高速化したらしい
https://ufcpp.net/study/csharp/sp_attribute.html 属性付加について質問です
上リンクにバブルソートの途中経過を出力する例がありますが、
/// <summary>
/// SHOW_INTERMEDIATE というシンボルが定義されているときのみ
/// 配列の内容をコンソールに表示する。
/// </summary>
[Conditional("SHOW_INTERMEDIATE")]
がよくわかりません。
このシンボルの定義はどこで誰がするのでしょう?
途中経過を見るかどうかならbool型を渡すだけでできると思うのですが属性を使うメリットは何でしょう?
https://hatsune.hatenablog.jp/entry/2021/12/20/151144 の条件つきコンパイルシンボルに
「SHOW_INTERMEDIATE」も指定して実行したときだけ
IntermediateOutput(array);
が呼ばれる
ソースコードをいじらすともプロジェクト設定だけで動作を切り替えられる
https://ufcpp.net/study/csharp/sp_attribute.html の例だけなら本来ならConditional属性より#ifで動作を切り替えるほうが自然かもしれないけど、メソッドに属性をつけることで「コンパイル時の」動作を切り替えることもできる
#if~#endifだけでこと足りるけど、使いすぎるとコードが見にくくなる。
Conditional属性ならメソッドを呼び出す部分に何も増えないからすっきり。
1年ぶりくらいにC#開発やったらPrismのライセンスが変更されててビックリした
条件があるとはいえ商用で使っていくのは厳しいからどうしようか迷ってる
とりあえずv9.0未満ならMITライセンスのままだから使えないこともないんだけど、このまま使うのもなぁ…
c#がニッチになればなるほど有料ライブラリの存在感が増してきて足元見られてる感はある
MAUIとか、何かググるとsyncfusionのボッタクリライブラリの広告ばっか出てきてめちゃくちゃげんなりする
どうしてこうなった・・・
>>66 Visual Studio for macの廃止で
MAUI の無料の開発環境はゴミすぎる VScode + C# Dev Kit しかなくなったからな。
もうお金持ちしか使っていない。
MAUI アプリは市場的に iOS 抜きでは考えられず、そうなると「mac上での開発」が大前提なのに
Visual Studio for macが廃止になったからな。
Expressも更新しないしドケチ弊社はvscodeですよ
結局あと数年は使うデスクトップアプリなら何使えばいいの
結局のところMAUIはAdobe FlashやSilverlightの失敗と同じ道を歩んでしまった。
スマホアプリとデスクトップアプリの統合なんてできるわけないのに。
アップルのMac Catalystも壮大にコケただろ。
いやいや、スマホとデスクトップのフレームワーク統合はReact NativeやFlutterで成功してるよ
MAUIが失敗したのは単にそれらの競合を上回るだけの魅力がなかったから
そもそも当のMS自身がMAUIではなくReact Nativeを主力として採用しているわけで、ドッグフーディングすらまともにやられてない冗談みたいなゴミよ
魅力が無いという消極的な話じゃなくバグがありすぎるんだよ
MAUI使うならMAUI Blazor一択
Flutterで作られたデスクトップアプリってあるの?ないこたないんだろうけど、聞いたことがない
ラムダ式だらけで何やってるか分からん
名前付きならその名前でなんとなくやってる事が推測出来るのに
具体的にどんなコード?
触れたことないからどんなもんか気になる
ラムダだとか無名なんたらって引数には名前書かせたりするのがイマイチだよな
全部匿名で書かせろや
最近のC#だと使わない変数/引数は「_」で書けるけどこれのことかな
破棄は呼び出し側だし、_だけで変数名にできるけど、やる意味無いしなぁ
名前無いと中身コメント書かれて無いと何やってるかますます分からないだろ
おまえら自分の事しか考えて無いのかよ
実例出さないとコードを書いたやつの問題なのか読んでるやつの問題なのかわからないな
普通にどっちもありえる
OpenAIが複雑な推論能力をもつAIモデル「OpenAI o1」と「OpenAI o1-mini」を発表、プログラミングや数学で高い能力を発揮
https://gigazine.net/news/20240913-openai-o1/ 宣言してない変数が出てきたらそれに引数割り当てろとかそんなことを言ってるのかな?
new Action<A>(=> Console.WriteLine( s ) );
か
new Action<A>(Console.WriteLine( s ) );
見たいなことなんじゃないかと
Unityって.NETに移植される予定あるの?
ここ5年ほどは.NETばかりが進化してUnityは時止まってる感あるけど
あのースレ違いとは重々承知の上なんですが、ASP.NETの求人ってどんな感じですかね
これまでずーっとC#のデスクトップアプリとかまぁローカルなシステム作りばかりやってきたんですが、いくらなんでも未来がないからウェブへの転職狙ってるんですよね
でキャリア活かそうとASPいじりはじめたんですが今はどこもかしこもjavascriptみたいなイメージで
業務でASP使ってるとかASPで転職活動したとかそういう人いたら話聞かせてほしいんです
どう考えても普通にJavaScriptやる方がいい。
C#履修者ならTypeScript自体の習得は爆速だよ、本気でやれば多分一週間もかからない。何しろ設計者が同じなので書き味に違和感が無くなるのはすぐのはず
問題はReact、Vue、Nextなどフレームワークやライブラリのスキルだけど、正直ここは常にコロコロ変わって勉強が必要な分野なので途中参加でもあまりハンデはないと思う
転職しても、JavaやC#のお硬い言語のキャリアは重宝されるから決して無駄にはならないはず
ASP.NETやBlazorの需要は限定的だし先行き不透明過ぎる
自分も似たようなことしたので頑張って
業務でASPNETCoreバリバリ使ってはいるけど
ASPNET単体の知見が転職活動で役に立つとは思えない
というか、C#ができてHTML/CSS/JavaScriptが読み書きできる人なら普通に無勉強/経験なしでもASPNETで開発できちゃうからセールスポイントにならないのよね
うちんとこはReactみたいなモダン()なフレームワークは使ってないけど、それでもJS/TSの知識は必須
愚直にWeb系の勉強をするのが先かなと思うよ
>>102 >>103 参考になりました。とりあえずHTML/CSS/JavaScript(TypeScript)辺りちゃんとやろうかと思います
ただなぁ……自習してました!じゃなんもアピールにならない気もするんだよなぁ……結局実務経験0だし
プログラミングスクールでも受講してある程度やったと保証になるものを取りに行こうかな
むしろプログラミングスクールの経験のほうが誰もまともに受け取らないよ
自走力がないやつと思われる
素人じゃないだろうしわざわざナメられる道を通るのはオススメしない
そもそもSVNの現場ばかりでgithubの使い方よくわからないレベルだわ
というか世の中10年前にはSVNなんてオワコン言われてたってのが信じられねぇ
個人で使う限りじゃ4つくらいしかコマンド使わんからなぁ
C#13(.net 9)でfieldキーワードが使えるようになるって聞いたのですが本当ですか?
VisualStudioでプレビュー版の.net9入れてみたけど使えないみたいでした
それともプレビュー版だから使えないのでしょうか?
え、一番期待してたのに…
c#でググれの人は何て言ってるんだろう
ありがとうございます
確かに記載が無いので残念ですが今回は見送りっぽいですね、、、
https://github.com/ufcpp-live/UfcppLiveAgenda/issues/94 >たぶんもう C# 13 で入れるもの確定。参考: Language Feature Status
>今入ってないものは入らない。
>field キーワードは「C# 13 GA のタイミングで、 preview で取り込み」みたいな話を
https://aka.ms/dotnet-discord で見た。
だそうです
うーん、微妙か
まぁ.net 10では入るだろうし来年に期待
C#追っかけなくなって知識がdotnet4.5辺りでとまっている…
それ以降はrecordとかしかしらん
メモ帳や日記帳アプリみたいな軽いアプリで、ソースコード公開されてて
コードが初心者にも参考になるようなサイトあるでしょうか?
こんなのじゃあかんのん?
C#で自分だけのメモ帳を作成してみよう!手順・方法を徹底解説します
https://www.sejuku.net/blog/102177 ググったら一分も掛からないで出たけど
>>122 サンクスです、丁寧に書いてあってわかりやすいのですが
設定項目を変更した時の設定反映のタイミングとか
form2からform1にデータ持っていく場合とか
やり直し機能とか
うまい人はどうやって全体まとめてるのかなって
必要な部分だけ他人のコードを読むか自分でひたすら考えて実装してトライアンドエラー
どちらも地力が格段に上がるけど中級者は避けがち
それメモ帳というかエディタで大変な箇所を全部端折った記事だから
適当な公開されてるソース読んだ方がいいね
その適当なのほしいって事やろな
ここの連中は冷たいから教えないんだよね
メモ帳とかの作者さんでソース公開されてる人もC++が多かったり
長大なテキストファイルの先頭から文字数を数えたり
一行の長さを測定して画面右端の折返し位置を決定したり
そういうのって現実的に可能なのか?
普通は穴あきバッファを使う
EZ/VZはlessに編集機能を付けるってユニークな設計をしている
設計自体を知りたいなら 「The Craft of Text Editing: Emacs for the Modern World」が参考になるかと
FINALはdumpすると、MIFESとREDの悪口が書いてある:-p
「穴あきバッファ」なんて初見なんだけどもしかして誤訳じゃない?
エディタのバッファ管理用のデータ構造は効率的な編集をサポートするためで
文字数カウントや行の折り返しの話はどういうデータ構造を使うかとはほとんど関係ないよね
今はGap Bufferもあまり主流じゃなくてPiece TableかRopeが使われることが多くなってる
興味があれば↓この辺読んでみるといい
TypeScriptだしC++に比べるとわかりやすいはず
https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation この辺の話はエディタのコアな部分ではあるけど
>>123の知りたいこととはほぼ関係ない
なにかの文書を画面に表示したい
← 表示したい部分が何行目に当たるか計算する
← 一行に含まれる文字数を知りたい
← プロポーショナルフォントのときはどうするん?
← 行の長さを測定する関数使え
← 一文字ずつ足したり引いたりしながら測定を繰り返す
← 全部の行についてこれやんなきゃかよ?
← やってられない
>>135 >← 表示したい部分が何行目に当たるか計算する
テキストファイルなら頭から読み込むしかなく改行でカウントアップするだけ
>← 一行に含まれる文字数を知りたい
>← プロポーショナルフォントのときはどうするん?
文字数によって折り返し位置が決まるか
表示幅によって折り返し位置が決まるかのどちらか
両方のルールを同時に適用するというのは一般的ではない
プロポーショナルフォントが関係してくるのは後者の場合のみ
表示幅で折り返す場合は指定したRectangleにフィットするよう
よろしくやってくれる表OS提供のAPIがあるので基本的にはそれを使う
APIの内部的では各文字の表示幅を足し算してるが
とりあえずは画面表示部分だけを計算すればいいので
思ってるほど大した計算量ではない
>← やってられない
んなことたぁない
そもそも公開されてるソースがC++多いからなんだというのか
矢印 Unicode(ユニコード)一覧 文字 0g0.org
https://0g0.org/topic/arrows/ 個人レベルで作るなら別にベストな方法じゃなくても良い
とりあえず作ってみたらいい
そして徐々にブラッシュアップしていけばいい
どうせTextBoxかRichTextBox使うから
いちいち行の文字数数えて改行とかという発想がでてこなかったわ
毒されてるんだろうか
質問者の作りたい物に行番号やカーソル位置座標とか要らなさそうだから
テキストボックスで十分だと思う
行列番号、文字数、ファイルサイズ、ドラッグ移動、カラー絵文字、正規表現検索&置換、折り返し
これぐらい欲しい
まじかテキストボックスがカラー絵文字に対応したのか
週末試してみるわありがと
win11で作ったformアプリがwin10で盛大にズレてて頭抱えてる
>>152 何をもってOSに起因する症状だと判断したの?
OSバージョン毎のフレームサイズの差異とか気にもせずに処理でも書いたか?
OS関係なく単にディスプレイのスケーリングの違いでは
フォントとか配置とかやり直しはMacOSのあるあるだと思ってた
ライブラリを使用するために下みたいなコード書いた
ライブラリ内でIHoge.Method();の機能を上書きしたいのとHogeで設定されるさまざまな機能を使いたいがためにIHogeを実装したHogeクラスを継承してMethod();を隠蔽、そのうえでライブラリから呼び出されるようにIHogeをさらに継承?実装させてる
ちょっと無理矢理感強いけどこれはアリですか?
ライブラリの中
~
IHOGE.Method();
~
public interface IHoge
{
public void Method();
}
public class Hoge : IHoge
{
public void Method()
{
元の処理
}
}
自前で作ったクラス
public class NewHage : Hoge,IHoge
{
public new void Method()
{
上書き処理←やりたいこと
}
}
>>158 Hoge.Methodにvirtual
NewHage.Methodでoverride
>>158 それがやりたいことなら別にいいんじゃね?
Hogeの他のメソッドがMethod()を呼ぶとか
Method()がHogeの他のメソッドを呼ぶとかの関係が出てくると
newを使わない場合に比べるとバグるリスクが高くなるような気はする
インターフェース+コンポジションにしておけばバグるリスクは低くなる
その代わりに多少書く手間がかかる
>>160 Hogeはライブラリの中の実装だからvirtualにできないのつらみ
>>161 なるほどありがとう
てかVisualStudioが教えてくれた
緑波線でnewしてくださいって
public new 戻り値の型 メソッド名
ML.NETを試してみたら思いの外お手軽で面白いな
アプリにさくっと組み込めそうだ
.NET MAUIで試したことあるけどWindowsはいけたがAndroidではトレーニングでエラーはいた記憶
>>159 サンクスです、これはすごいな
解説がおおくてわかりやすい
これのソースコードがダウンロードできたらよかったのに
CookieってSystem.Text.Jsonでシリアライズ・デシリアラズするとDomainKey変わっちゃってSet-Cookieで同じ名前のクッキー来ても違う奴判定されてダブるんだな
正確に言うと先頭ドット有りだと変わらないのと、BinaryFormatterやNewtonsoft.Jsonで非パブリックフィールド含む全フィールドをそっくりそのままストア・ロードさせれば変わらないんだけど
ZipPlaってファイル管理ソフトのソース持ってる人いる?
居たらアップして欲しい
>>171 ぐぐったらGitHubにForkされたのがあるようだぞ
オリジナルからどの程度手が入ってるか知らんけど
>>172 自分もそれは見つけたんだけど、何を変えてるのかもハッキリしないんですよね
なのでオリジナル持ってる人が居たらと思いまして
WinFormsってWindowのクラスネーム決められないの?
Win32のFindWindowのClassNameで探させたいのだけど
protectedなCreateParamsプロパティをオーバーライドしてClassNameを書き換えることはできる
独自名ならとりあえずRegisterClassは必要だけどそれだけで済むかどうかは知らん
C#側のプロパティは書き換えられても実際の内部の値はそういうことしないと無理そうか
RegisterClassExしてやろうとしたことあるけど
CreateParamsでRegisterしたClassName指定してもエラーになって
それで良く分からんまま放棄したな昔
人間が垂れ流した知識を混ぜるだけのAIが、人間が知らないことを教えられるわけないだろw
世界中のどこかで語られたかもしれない事実をそこらの人間がすべて知ってると思うのがおかしい気がする
つーかさWin32APIのCreateWindowで作ったウィンドウをC#にAttachする程度基本的な仕組みぐらいあるやろ
あるやろ…
CSharp初心者が学習始めるなら何からがおすすめ?
多分IIS?使ったウェブアプリになるんだけども
Javaでのアプリ開発経験はあり
SetWindowLong
SetWindowLongEx
科学 + 5ch
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
http://2chb.net/r/scienceplus/1733576027/ コメントに面白いことが書かれている
盲目的にvar使うなとは思うけど、一切使うなはないなぁ
まあマイクロソフトのサンプルにも使ってる例あるしな
varで参照型を扱うとnullableになるのはどうにかしてほしい
推論型なんだし、必要に応じて使えばいいんじゃね?
objectならともかく
varが絶対必要なのって匿名型使うときだけだから、必要に応じて使う、だとvarはほとんど用無しになっちゃう
戦争に参加するつもりはないが仮にvar使うんなら必要に応じてじゃなく基本varにしないと
c#は基本varでいいよね
多分大体のc#er?はvarじゃないときにだけ理由を気にするんじゃないかな
初期に頭のいい人は一番先に varに飛び移った
その後みんな気が付いて移行した
今でも使わないのはご老人
インターフェース分離の原則が分からない
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
interface IBird { string Name { get; } }
interface IFlyable { void Fly(); }
// ペンギンは飛べないので IFlyableを実装しない
class Pengin : IBird { ... }
class Eagle : IBird, IFlyable { ... }
のようにした場合に、プログラムが List<IBird> birds のような形でデータを持つと、「飛べる鳥がいる」という情報が型から消える
foreach (IBird bird in birds) {
Console.write(bird.Name);
if (bird is IFlyable flyable) {
flyable.Fly();
}
}
「飛べる鳥なら飛ばす」ようにしたい場合、インターフェースを分離する場合だと上記のように is でキャストするしか無さそう?
IBirdで扱っているのに「インスタンスは IFlyable である可能性がある」という情報に依存してるのに少し違和感があって、より綺麗な解決策があれば知りたい
そこを別々のインターフェースとして分離するのが間違ってるだでは
飛べる飛べないも”鳥”の一要素でしょ
>>206 Nullableな IFrayable? をプロパティとして持たせて、飛ぶ鳥の場合はthisを返すようにするということ?
そこだけのインターフェース化に拘るなって言ってんだよ
鳥とペンギンだと近すぎて例えとして微妙だった
例えば「動物のリスト」のようなデータを持ち、動物には鳥のように飛べるクラス (Flyメソッドを持つ) と、トラやライオンのように走るクラス (Runメソッドを持つ) があるといった場合
動物の一覧を持つには List<IAnimal> のような型を使うと思うけど、これは合ってるよね?
その上で動物によって違うアクションを行わせたいとする
IAnimal側に CanFly のようなメソッドを追加していくと、例えばサルのように「道具を使う動物」が後から追加された場合、IAnimalにメソッド追加が必要になり、それはBirdなどの各クラスにも影響する
Birdクラスは「道具を使う」なんてことは知らないのに、インターフェースのために CanUseTool のようなメソッドを後から追加するのは違う気がする
そうするとやっぱインターフェース分離の形になりそうで、そうなると利用側で is でキャストするのが落としどころなのかと
鳥以外にも飛ぶ(正確には滑空だが滞空することに変わりはない)動物は居るし
鳥だって地面をRunするヤツは居る
鳥にも、猿程でなくてもその辺に落ちてる物を道具的に使うヤツも居る
お前の例題がそもそもめちゃくちゃなんだよ
ここの住人はC#を使っていてSOLID原則に悩まされたことなど無いのだろうか
>>203 ある動物が飛べることと、鳥であることは独立なんだから、
「飛べる鳥がいる」という情報はなくても仕方なくない?
統計的な相関関係はあるかもしれないが、包含関係でないなら仕方ない。
飛べる他の動物を無視するのなら、IBirdを継承したインタフェースでIFlyableBirdを作ればいいのでは?
ISP自体はC#でよく出てくる問題じゃないの?
これなんかまさにそう
https://dev.to/fabriziobagala/interface-segregation-principle-452m だけどこういった解説はISP単体の説明になっていて、泳ぐ、走るといった能力の異なるものを Animal として抽象化する方法を教えてくれない
綺麗な方法でなくても「C#ではこうすることが多い」のようなプラクティスがあれば知りたかったんだけど、そういうのは無さそうなんですかね
実装を伴わない抽象化の話ってなんの身にもならないからやめなさい
それとインターネットサービスプロバイダの話は他所でやってくれ
求めてそうなプラクティスは見た事ないなぁ
個人的には、飛ぶにしても走るにしても動物という存在の態様のひとつだから
動物IFのプロパティに含めるでいいんじゃないかと思うけどね
var unko = new Unko()
より
Unko unko = new()
の方が良くね?
もっと地球規模の視野で考えろよ
うんこも地球の一部だろ?つまりうんこは地球とも言える
わかるか?
>>217 まぁ、後者ができるようになったの後になってからだから
>>214 それISP単体の説明にもなってない
class Penguin : IAnimalにNotImplementedExceptionでFly()を実装すれば即ISP違反だというのは間違い
まずは原典にあたってISPを理解してきたほうがいい
謳われてる原則をどう活用するかはその後
そもそも
そんな鳥のプログラムなんか一般的じゃねーし
>>220 「クライアントが『泳ぐ、飛ぶ、もしくは走る動物』として使うことを想定するのなら、そのインターフェースであるIAnimalにその情報を含めるのは適切」ということですかね
class Penguin としては Fly や Run などのメソッドの実装はノイズに思えるけど、IAnimalとして使われるなら、その契約に従えという感じかな
(それだと後から「道具を使う」がIAnimalに追加された際に Penguine もメソッド追加が必要で、そこがモヤモヤしてる)
こういう場合にアダプタ (ラッパー?) を使うのって適切?
純粋に Penguine としての機能を提供するクラスと、それを IAnimal として使うためのアダプタみたいなの
それだと更に複雑さを増すだけ?
OOP難しい……
適切とか
とりあえず作ればよくね?
適切かどうかなんてエグゼにしたら関係なくね?
それとも論点だけ考えて実際のプログラム作らないの?
それ何したいの
SOLIDが現実のコードで使われなかったり、「オブジェクト指向は問題を複雑にするだけ」みたいなことを言われる原因
>>203 インターフェース分離の原則は「クラスが必要としないメソッドを実装しない」ってだけ
ペンギンのような飛べない鳥が IFlyable を実装しないのは正しい
あとは「飛べる鳥」をインターフェースで分かるようにしてやればいい
isを使う羽目になったのは飛べるかどうかわからない IBirdをListにしてるから
---
interface IBird { string Name { get; } }
interface IFlyable : IBird { void Fly(); }
// ペンギンは飛べない
class Penguin : IBird {
public string Name => "Penguin";
}
// ワシは飛べる
class Eagle : IFlyable {
public string Name => "Eagle";
public void Fly() => Console.WriteLine($"{Name} is flying!");
}
// 飛べる鳥だけを扱うリストを作る
List<IFlyable> flyableBirds = new List<IFlyable> { new Eagle() };
foreach (var bird in flyableBirds) {
bird.Fly(); // 明示的に飛べる鳥しか扱わない
}
SOLIDにしても所詮理想論であって現場に即してるわけじゃないしなぁ
サイコパスの脳の違いを発見。一般の人に比べ線条体が大きいことが判明
karapaia.com/archives/52313287.html
後から増えた「道具を使う」には何かいい感じにデフォルト実装つけとけば既存のクラスには影響しないんじゃない
C# 8 からはインターフェースのデフォルト実装が使える
Win10や11のOS付属のpowershell5.1でインラインで書けるC#ってバージョンちょっと古くね
できれば新しいRoslynのC#をpowershellから使いたいのだが
なんか昔の記事しか見つからん
どうせ別に入れる必要があるならPowerShell 7入れれば良くね
>>236 起動時に出て来るメッセージすら読めないのか
>>239 馬鹿が必死に調べただけの浅い知識で言い訳してる
今のところ互換性の為に残してあるんだろう
それを変えちゃうと問題が起こる可能性があるしMS側のメンテがめんどうなので
変えたい人は7とセットで入れろということなんだろう
>>239 バカの相手はしなくていいわ
その情報はありがたいが
PowerShellは完全に袋小路だからもう諦めた方がいい
6以降は事実上Azure専用
>>242 うわっ
自分の言い訳コメントに自作自演で恥ずかしい馬鹿発見
なんで作っては捨ててくスタイルなんかなMicrosoftは
Windowsに標準搭載されてる.NET Frameworkと今の.NETの時点で互換性ないのに
なんで.NETアプリであるPowerShellが叩かれるのか
標準搭載されてるPowerShellは.NETアプリじゃなくて.NET Frameworkアプリだからね
>>245 MSの社内政治に敗れたチームのプロダクトはそうなりがち
社内政治うまくやってると微妙なやつも長生きする
.NETがFrameworkと互換性無くて捨てられないから
互換性ないってことは、.NETとframeworkの2つのアプリを動かしたら、GCもそれぞれで動き始めるの?
PowerShellはWindowsにシステムワイドにインストールされた .NET Framework が存在するという前提で成立していたのに、
.NETでは.NET自体をアプリにバンドルするか、必要に応じて特定のバージョンを追加で入れるかになって完全に破綻しちゃったんだよね
一般的な.NETアプリならバンドルは可搬性が向上するから好ましいことだけど、
PowerShellの場合はシステムワイドにインストールされたいろんなモジュールと連携しなきゃいけないから.NETバンドルはありえない
完全に詰んでる
だからPowerShell Coreは標準装備じゃなくて追加装備
Windowsにそもそも入ってないなら追加インストールでいいんだけどね。問題は5が入っていること。
それによって「なぜ元々入っているのにわざわざ追加するのか」という当然の疑問を解消するコストが生じる。
開発者の好みだけでサポート期間も互換性も劣るゲテモノをゴリ押しするのは極めて困難だし、
そもそもPS書いて飯食ってるタイプのエンジニアでは最新に拘る人はそもそも少ないだろうね
またペンギンやら飛べない鳥だとかの話がしたいのかい?
それともPowshellの付属物の話がしたいのかい?
どっちなんだい?
>>257 >それによって「なぜ元々入っているのにわざわざ追加するのか」という当然の疑問を解消するコストが生じる。
>開発者の好みだけでサポート期間も互換性も劣るゲテモノをゴリ押しするのは極めて困難だし、
ほんそれ
5が全部入りにしておくのが正解だっただろうな
PS for sysetmみたいなのを最小セットで入れておけば良かった
>>264 お前がC#の話題振ってくれりゃ乗るよ
早くしろよ
いや知らんがw
俺がC#の話題にしろ言うたわけじゃないしw
今関わってるプロジェクトがスペース2つでインデントしててちょっと面食らってしまったんだけどこれ珍しくないもの?
今まで携わってきた中で一件も遭遇したことなかった
過去に深いネストを大量生産する人がエラくなっちゃって、そういうルールになってしまったんじゃないかと妄想しちゃうなw
今時スペース2個は珍しいな、C#とかではあんまりない気がする
昔々はどの言語でもタブを使っていいかとか、スペースで代用するなら2個か4個かで論争があったらしい
JSは2個が主流だった気がするけど今はどうだろ
タブのが合理的
Goみたいな標準フォーマッタがあるのが理想だけどC#はそう言う文化はないね
俺はスペース2個のが視線移動減って楽だと感じてるからかなり昔から2個派だよ
>>268みたいな日本人特有の右倣えのお仕着せルールに甘んず昔から超効率化してるやつらは世の中に沢山いるんだよ
勉強になったな
TABに統一してるけど
表示上は半角スペース2から4個で用途で変えてる
{}は
if(){
}
の方が好き
普通は
if()
{
}
これ?
逆、最初の頃は上が大多数
ブログやら初心者講座やらで下の書き方が主流担ってきてる感じ
スペース2個インデントって言うと、XMLやHTMLを思い浮かべるな
>>275 違うぞ
上のはJavaやJavaScript界隈でのデファクト
下はMicrosoft系のC#とかのデファクト
公式が出してるコーディング規約がそうなってるだけ
>>276 例えばC#というかasp.net系だとrazor構文でhtmlと一緒にC#のコード埋め込む
そうするとインデントは2の方が見やすい
>>271 C#はチェーンメソッドのドットを縦に綺麗に並べる文化が有るんでタブだと都合が悪い
2でも4でも良いけどスペースがデファクト
>>277 いやだから
C#が出る前というか出始めの頃で
Cプラプラ使い達が多かった時さ
当時、というか関数書くときって
hoge(){
…}
て書くのが一般的やったん
んでDelphiが出てきたらこの{}をBegin…Endで囲むから
hoge()
Begin
…
End
ここらへんはVBやVBAとかにも反映されて
その後C#で出した際にって感じかな
>>279 タブをインデントで使ってスペースをアライメントで使えば理論上ズレないよ
Goのフォーマッタはこれに従ってるからタブ幅は任意に設定できる
prettierみたいな途中で強制的に折り返すフォーマッタとは相性が悪いけど
Indent with tabs, align with spaces
https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces これね
これが理想だけどエンジニアのレベルが高くないとこのルールを守るのは難しいからスペースにしてるのが大半
ただしGoは強制フォーマッタでこれを解決してる
個人プロジェクトなら最初から好きなタブ幅にすればいいからタブにするメリットもあまりないし
気分でタブ幅変えれるのは結構メリットあるけどね
俺はずっと
>>274の前者でインデントはタブだなぁ
なおタブの幅はスペース4個分
この手の話は職場のルールで決まるから個人がどうこうは関係ないよな
ただ自分のツールなんかは好きにしろだが
カッコ、演算子、型と変数の宣言の間の空白などもめる話題はいくらでもある
>>285 「原子力発電所の建設」について議論したいなら付き合うよ、それで議題は?
まあreshaperでテーム共有設定使うだけだしな
>>287 では失礼して
Unity製ゲームのMOD開発なんかでリフレクション使いまくるのもなんかスマートじゃないから、
aelij氏のIgnoresAccessChecksToGeneratorを魔改造させてもらってフィールド含めて全パブリック&readonly解除でゲームのコードに全アクセス出来るようになってめっちゃ捗るようになったのだけど、
欲が出て標準ライブラリにも手を出したくなってやってみたらmscorlibなんかはReferenceAssemblyだからプライベートフィールドはそもそもdll内に含まれてないから書き換えられないんだよね。
ランタイム時の実体dllを決め打って渡せばstring.m_firstCharとかList<T>._sizeとかも全てアクセスできるようにはなるんだけど決め打ち渡しもスマートじゃないからどうにか自動で解決をしたい。
ILSpyやmono.cecilにはランタイム時の実体dllを特定するコードあるんだけどbuildアクションから同じ事するのって可能だろうか?
へー
なんだかもうゲームよりMOD開発、MOD開発より開発環境開発の方が長くなっちゃってますわ
だって、ここ
別にゲーム開発やないし
プログラムやで
いまだにmonoで簡単にいじられまくりゲームあるのか
>>289 日本語がややこしいけど
①標準ライブラリのPrivate含む全フィールドにリフレクションを使わずにアクセスして書き換えたりしたい
んで、
②実体DLLを決め打ちで渡せばアクセスできるってところまでできてる
あとは
③実体DLL取得を自動化したい
④なおかつビルドプロセスに組み込みたい
ってことか
MOD開発とか知らんけど面白そうじゃん
いまいち細かい要件がよくわからんけどAppDomain.CurrentDomain.GetAssemblies()で現在ロードされているすべてのアセンブリが取得できるらしいが、これ試した?
駄目だったならどういうところがダメだったのか教えてくれ
>>295 要するにIgnoresAccessChecksToGeneratorの話でMSBuild内のコードとして動くものだからそれやってもMSBuildがロードしてるものが返されるだけとなる
ILSpyなんかもtypeof(object)などから解決してるので上記の理屈でそのまま移植はできない
>>293 マルチメインじゃなくmodフレンドリーなゲームならil2cpp化せずそのまま出してるゲームも普通に多いよ
改変やチート防止のためなら難読化含めてやったところでそこまで難易度上がらないからそれ目的ならRustみたいにカーネルドライバ付けるしかない
個人開発の局所的な用途のマイナーツールの話が原発の建設並の重大事なのか
ちょっと難しすぎてわかんねえな
原発ってただの湯沸かし器じゃん
燃料がちょっとヤバイってだけで高尚なC#のプログラムと比較すんなよ
C#だってただの道具
しかもC#だけじゃお湯も沸かせない
高尚とかちゃんちゃらおかしい
ツールは手段であって目的はアクセシビリティバイパスだから言語レベルのスケールの話な
実際これ求めてる人は少なくないからUnsafeAccessorが実装された訳で
てかリフレクションの方が文字列で指定してる分よっぽど危険だと思うんだけどな
エロがビデオを進化させてきようにチートがソフトウェアを進化させるんだよ
湯沸かししかできない原発野郎は難しいなら黙ってろ
煽りたいだけのやつが居着いちゃってるのか、このスレ
Enum.IsDefined(enumType, intValue)ってボックス化する?
AIに聞いたら最初は「ボックス化しない」とか言われたんだけど、第2引数がobject型として受け取ることを指摘したら「ボックス化するかもしれません」みたいな曖昧な返答されてよく分からなくなってきた
object型ならするよ
.NETのバージョンにもよるけどgeneric版の方が型がコンパイル時解決されるからパフォーマンスは良い
確かにジェネリクスでstruct制約付けたらボックス化回避できそう
ありがとう
public TEnum ConvertToEnum<TStruct, TEnum>(TStruct value)
where TStruct : struct
where TEnum : Enum
{
if (!Enum.IsDefined(typeof(TEnum), value))
throw new ArgumentException();
return Unsafe.As<TStruct, TEnum>(ref value);
}
JetbrainsやILSpyでIL見てboxあるかどうかみればいいんじゃね
ハック的なことなんだけどインスタンスのオブジェクトヘッダに埋め込まれるクラスハンドルへのポインタ?をインスタンス無しで得る方法って無いかな
typeof(MyClass)ってすると正にそのポインタが「mov rcx, 7FFB716DE758 -> call clrのtype取得関数」って感じのアセンブラが生成される訳だけど、その7FFB716DE758を得たいんだよね
インスタンスがあればUnsafeライブラリ用いて簡単に得られるのだけど
文章修正してたら日本語おかしくなったけどもし知ってる方いたらヒントでも何でも教えていただきたい
>>313 GetTypeやtypeofで得られるものはあくまでもType型のマネージドインスタンスだから全く違う
だけど逆アセをするとtypeof()時には即値でハンドルへのポインタ?がアセンブラコードとして埋め込まれてるので内部的にはめちゃくちゃ簡単に得る方法があるはずなんだよね
一応自己解決だけどGetTypeやtypeofで得られたTypeインスタンスから「type.TypeHandle.Value」で希望のものは得られた
本来即値で得られるはずなのに冗長でもやもやはするが
ChatGPTに聞いたら同じ答えが返ってきたけどRuntimeTypeHandle.Valueは環境によってメソッドテーブルへのポインタじゃなくEETypeへのポインタや実装依存のメタデータへのポインタになる場合もあるから自分で確認しろよとのこと
JITだろうが何だろうがconst intなんかは即値で埋め込まれるしね
だからクラス名.TypeHandleValueみたいなconst持っててくれたら嬉しいんだけど需要ほぼゼロすぎるか
ん?即値で得られない理由の話だったか
そっちならJIT関係あるわな
いや関係ないよ
なぜなら逆アセすれば分かるけど思いっきりレジスタ長以下のconst同様の挙動を見せてるからね
typeof時にね
アドレスとかプロセス起動のたびに変わることは無いんだっけ?
>>323 .NETの場合は当然変わるしネイティブでも設定次第では変わり得る
でもそもそもC#やJavaは実行時にその都度機械語を組み立てて行く訳だから、であればその都度埋め込めばいいだけの話
なら結局、ユーザークラスじゃ都度変わりうるってことじゃ?
>>321 それはJITやAOT後のものを見てるからでしょ
JIT/AOT時に異なる相対アドレスに配置できる余地を残すためにC#/ILの段階では固定しない
ユーザークラスがILの段階で決め打ちになるわけないだろ
ユーザークラスだろうが何だろうが別に関係ないし
IL段階で定数になる必要もなくて事実として実行時に機械語になるタイミングで定数化されるんだよ
プログラマがその定数にアクセスする手段がないだけで
インスタンスの型の厳密なチェック typeof (X) == x.GetType() やジェネリック型のチェック typeof (T) == typeof (X) はJITで最適化されるから、
質問者のケースがもしこれらに該当するなら変なハックは必要ない
Task<T>を返す非同期メソッドをUIスレッドで呼び出して結果を取得したいのですがどうすればいいのでしょうか?
ConfigureAwait(false)の後やTask.Runでスレッドプール上?で実行されてる
コード内からメソッドをUIスレッドで呼んで結果を取得したいのです
イマイチ質問が把握できないがこういうことか?
UIスレッドでTaskScheduler.FromCurrentSynchronizationContext();してTaskSchedulerを確保しておく
UIスレッドで実行したいメソッドは上記TaskSchedulerを使ってStartするTaskとして実行する
public Form1()
{
this.Button1.Click += ExecuteAsync;
}
async void ExecuteAsync(object? sender, EventArgs e)
{
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
await Task.Run(async () => {
using var logger = new Logger("Task");
var task = Task.Factory.StartNew<Task>(() => SetTextAsync(), CancellationToken.None, CreationOptions.None, scheduler);
await task;
await task.Result;
});
}
async Task SetTextAsync() {
await Task.Delay(1000);
this.Text = DateTime.Now.ToString("HH:mm:ss");
}
あ、TaskCreationOptionsのTaskが抜けてる…
async Task SetTextAsync()の代わりにasync Task<string> GetTextAsync()だったら
StartNew<Task<string>>にしてvar text = await task.Resultすればいい
ああ、ありがとうごいます
それっぽいです
要はスレッドプールなどで実行されてるメソッドから
途中でダイアログなどを出してユーザのアクションの結果で更に処理を
進めるかキャンセルするかを決定したかったにです
同期コンテキストは調べたのですがこのPostなんたらじゃできないなと..
TaskSchedulerの方から攻めるのですね
ありがとうございます
ボタンなど押して非同期メソッドを呼び出す
この時、非同期メソッドには介入が必要な時に呼び出される非同期コールバックを渡せるようにする
呼び出し側で、非同期コールバックとして
ダイアログなどをだしたりする
ダイアログの表示などはUIスレッド実行したかった
こんな感じでした
BOOL TestFunc(DWORD dwType, LPBYTE pBuffer, LPDWORD pcbBufSize);
dwType:欲しいデータのタイプコード
pBuffer:要求したデータを入れるバッファへのポインタ
pcbBufSize:pBufferが指すバッファのサイズ
例えば↑のような関数をエクスポートしてるアンマネージDLLがあって
DllImportする時のプロトタイプ宣言ってどう書いたらいいんでしょ?
LPDWORDはref uintでいいのかなと思うけど
LPBYTEとか、それこそLPVOIDだのハンドル系受け取る引数なんかはどう宣言したものかよく解らなくて
典型的にはこう
bool TestFunc(uint dwType, byte[] pBuffer, out uint pcbBufSize);
ref/outで宣言すると使いやすいけどNULLを渡せなくなるってのが問題になったりすることもある
ケースバイケースなので一概には言えない
ポインタが絡むなら誰がメモリ確保して誰がどうやって解放するのかを把握してないといけない場合もある
outだと呼び出し元からバッファサイズを渡せないな
>>340 おぉ、ありがとう
ちょっとそれ元に弄ってみるます
refとかout使うと機械語的にはゴミラッパーが生成される
ついでにboolも実はネイティブ型ではないので同様にゴミが生成される
多少可読性や安全性を犠牲にして良いなら
int TestFunc(uint dwType, byte* pBuffer, uint* pcbBufSize)とすればC/C++と遜色ない機械語になる
戻り値はintなので != 0としてbool判定をする手間がかかるけどね
ついでに.NETCore系統で且つ内部でIOなどを行わずに計算量が少なく割とすぐ戻る事が確定している場合は[DllImport("native.dll"), SuppressGCTransition]とすると尚良し
もしネイティブ側の戻り値がBOOLではなくboolならC#側はbyteにすればいい
boolって実は結構罠だからな
CharGPTの回答
WinAPI型名 意味 C# 対応型 備考・使い方例
BYTE 8ビット符号なし整数 byte 0〜255
WORD 16ビット符号なし整数 ushort 0〜65535
DWORD 32ビット符号なし整数 uint よく使われる
LONG 32ビット符号付き整数 int 一部APIでは戻り値で使用
ULONG 32ビット符号なし整数 uint DWORDと同義扱いされることあり
BOOL 論理値(実際はint型) bool または int C#では [MarshalAs(UnmanagedType.Bool)] を使うと便利
LPSTR ANSI文字列へのポインタ string (MarshalAs(UnmanagedType.LPStr))
LPCWSTR Unicode文字列定数へのポインタ string (MarshalAs(UnmanagedType.LPWStr)) 通常はこれを使う
LPBYTE BYTEへのポインタ IntPtr / byte[] / byte* C#で配列やポインタとして使う
LPDWORD DWORDへのポインタ ref uint / out uint / IntPtr APIによって使い分け
HANDLE 汎用ハンドル IntPtr ハンドルは全部 IntPtr
PVOID/LPVOID 任意のポインタ IntPtr Voidポインタの表現
CHAR 1バイト文字 byte(ANSI)/ char(Unicode) ANSI文字列なら byte
TCHAR Unicode/ANSI切り替え可能文字型 char または string Unicode前提なら char/string
何のためのVOIDポインタかで変わるしIntPtrで良いもんでもないわ
まぁなんだ、CharGPTなんて言うアホは黙っとけw
>>345 最近のC#はMIL(IL?)でなくマシン語を直接()生成するようになったのですか
>>353 最近は native AOT といってそういうことができる
リフレクションが使えないなど制限もあるけど
元のレス先の345は、たぶん native AOT とか関係なく、中間言語が生成するコードも指して機械語と言ってると思う
>>354 ILの話はしてない
nativeAOT及びJITが最終的に生成するアセンブラを指して言ってる
パフォーマンス目的でC/C++と連携しようとすると返ってパフォーマンス落ちる事も多いからな
機械生成のゴミラッパーが挟まると呼び出しコストがdll内部のルーチンより1万倍掛かるとかザラにあるし
まぁ、アンマネージ呼び出しをパフォーマンス目的でやるもんじゃないしな
LibraryImport属性を使うとDllImport属性より最適化されたコードが出力されたりするの?
オリジナルのDataGridViewの列を作りたいんですが、デザインビューのDataGridViewからオリジナルの列を追加する方法ってありますか?
列A 列Bがあって 列C作ってA+Bを表示したいと言うことでは?
DataGridViewColumnを派生させたオリジナルの列をフォームデザインビューから列に追加したいんです
スマホとPCの作業を効率化したい--「Copilot Vision」の便利な8つの活用例
2025-05-03 07:00
https://japan.zdnet.com/article/35232549/ 1 プログらまーまこれを改造してるので上記以外の状態でも使用できるようにしている
2 すでにプログラムがあるので1〜コードを作成する必要が無い
ボイス・トォ・スカルの本態が一般パソコンにまで来たのでつい買い捨てができるようになった
マネーロンダリング 談合 インサイダー などがはかどるといわれる
“イリヤ神”がまたやった 動画生成AI「FramePack」が革命的なワケ
2025年05月05日 07時00分更新
https://ascii.jp/elem/000/004/267/4267160/ 4月17日に登場した動画生成AIプログラム「FramePack(フレームパック)」が世界的に衝撃を与えています。PCローカル環境で動画AIを動かすには、少なくともビデオメモリー(VRAM)が12GBあるビデオカードを搭載していないと難しいというのが常識でした。ところが、VRAM 6GBでも安定的に動作させられるため、一気に動画AIの裾野を広げそうです。開発したのは、画像生成AI分野で「ControlNet」や、使いやすいツール「Fooocus」などを開発してきたことで知られる、スタンフォード大学に在籍中のIllyasviel(イリヤスフィール、以下イリヤ)さん。既存の方法論にまったく違ったアプローチでブレイクスルーを引き起こす、“イリヤ神”のアプローチに再び注目が集まっています。
中略
AI動画を作ってみたいけれども、スペックが足りないために諦めていたという人が次々に自前の環境で試すようになってきました。既にワンパッケージでインストールできる環境も整えられているため、スタートも簡単です。様々なファイルをダウンロードしてくるため、初期設定は2時間くらいは見ておく必要があるものの、圧倒的にハードルが下がりました。
余所でやれとあなたが言ったから
色んなスレにマルチされたので
5月7日はマルチ記念日
IDisposableを実装したクラスのインスタンスがもし破棄されていたら再度生成するために、
if(instance.IsDisposed || instance == null){
instance = new MyClass();
}
という書き方してるんですが、(obj != null)の部分って意味ないんでしょうか?
すみません。ChatGPTが下記の回答をくれました。
instance が null の場合、insntace.IsDiposed の評価時に NullReferenceException が発生してしまうので、
if(instance == null || instance.IsDisposed){
instance = new MyClass();
}
にしなければならない。
必要かどうか。
設計上 instance が null になる可能性がある場合、null チェックは必要。
絶対に null にならないように管理されている場合、null チェックは不要。
「instance がまだ生成されていない、または使えない状態になったときに再生成する。」
という目的が明確にある場合、妥当で意味のある書き方です。
そもそも変数を使いまわそうとしているのが間違い
using等でスコープと連動させて管理すべき
>>370 もうほんのちょいだけ突っ込んだ解説すると、||演算子は左から評価を行い、左がtrueになった時点で右は評価を行わない
ゆえに、nullが渡ってくる可能性がある場合には~というChatGPTの回答に繋がる
>>372 ショートサーキットの有無は全然関係ないだろ
ChatGPTのダメ回答にさらに間違ったダメ解説を付け足すなよ
>(obj != null)の部分って意味ないんでしょうか?
(obj != null)の部分が見当たらない問題
フェイルセーフで実装するコードに対して、全体見えないのに設計直せは草しか生えない。ChatGPTでもやらん暴挙
その上でなぜ左右逆だといけないのかの解説に対してショートサーキットの有無は関係ないとかガチで草
その前にフェイルセーフなのかどうかすらわからないと思う
ここでしか初期化していないならフェイルセーフではない
フェイルセーフ
例えば信号が壊れたときに赤になるようにしてあれば交差点に通常運転で突っ込む事故が起こらない
壊れるにしても事態を安全な方向に振ること
初期化忘れや破棄されたインスタンス等を初期化するのはフェイルセーフではない
>>376 なぜ左右逆だといけないのかとショートサーキットの有無は関係ないんだけど指摘されてもマジでわかんないのか
ChatGPTの回答もう一度読んでみ?
あとはショートサーキット無しの|演算子にしたら問題がなくなるのかどうか考えてみ?
>>379 ああ言われて気づいた、説明間違ってたわ
最初のコードだと、左から判断を行うので、instance.IsDisposedを判定するときにinstanceがnullの場合にエラーが発生する
けど逆にするとinstance == nullではじくので、instance.IsDisposedは判定しなくなる
はじくじゃねーや、また言葉間違ってる
最初のコードだと、左から判断を行うのでnstanceがnullの場合にinstance.IsDisposeでNullにアクセスしようとしてぬるぽが発生する
けど逆にするとinstanceがnullの場合は左の条件だけで生成に向かい、またinstanceがnullではない場合には誤ってDisposeされているかどうかで判断して再生成する
今の世の中AIがあんのにまだこんな場末のド素人のホビープログラマーと知ったかの吹き溜まりにきよんのか理解に苦しむんやがwww
まぁAIの使い方すらわからん低脳チンパンやからこんなまともな回答が返ってこーへんスレで質問しとんのやろーなクソワロタ
>>381 あんたの言葉の方が、native 日本人にはおかしく聞こえる。
380 の説明は自然な日本語であり、論理的にも正確。
>>379 || 演算子のショートサーキット評価 (短絡評価) は大いに関係ある。
null判定を後に書いちゃうのはショートサーキット評価有無以前の問題だって話だろ
null合体演算子を使う方法もある
if (instance?.IsDisposed ?? true) {...}
「ヌルの場合は」という条件を強く示したいなら is null を明示して良いと思うけど、個人的にはこちらの方が簡潔に感じる
できればプロジェクトの設定でnull参照許容型を有効にして、 instance が null になり得るかを宣言時に分かるようにするとベター
(null になり得るなら MyClass? instance のように書く)
これが有効なプロジェクトなら、nullにならないもの (?がついてない変数やフィールド) についての null チェックはしなくて良い
それをコードそのまんまで日本語化してみろよ
基地外じみた内容にしかならない
世界最長のコンテキストウィンドウ100万トークン入力・8万トークン出力対応にもかかわらずたった7800万円でトレーニングされたAIモデル「MiniMax-M1」がオープンソースで公開され誰でもダウンロード可能に
2025年06月18日 11時43分
https://gigazine.net/news/20250618-minimax-m1-open-source/ >>MiniMax-M1は、合計4560億のパラメーターが含まれており、トークンごとに459億のパラメーターがアクティブになるとのこと。これはDeepSeek R1の8倍に相当するコンテキストウィンドウです
>>以下のグラフは競技レベルの数学、コーディング、ソフトウェアエンジニアリング、エージェントツールの使用、長文理解タスクにおけるパフォーマンスを主要な商用AIモデルと比較したもの。赤色がMiniMax-M1で、どのタスクにおいても競合AIモデルに匹敵するパフォーマンスを発揮できている
>>MiiniMax-M1はいくつかのベンチマーク、特に長いコンテキスト駆動のベンチマークでClaude Opus 4のパフォーマンスを上回りました」と報告
※AIを動作させている動画あり
↓上記のAIお下記をプレイさせれば性能が判明する
Gemini 2.5 Proは手持ちのポケモンが瀕死になるとパニックに陥る
2025年06月18日 12時30分
https://gigazine.net/news/20250618-pokemon-gemini-panic/ ◇
[プロテクトガードやセキュリティーホール発見可能]
※1 プログラムのバグ技[裏抜け道]を使用できる=チートコードを発見可能
・ マリオカートのショートカットはプレイヤー「極悪人」の表の抜け道でNPC「一般人」は使用不可能
[インサイダー/談合/なねーロンダリング/霊感商法など行う時の悪行で音波や電波をしての悪行の方法を発見可能
※ 政治家の法律上の抜け道を仕込める=ある業種だけの法律の抜け道を発見可能
[一般大衆の思考である特定の極悪人から目線を特定の統合失調症へ返させる装置]
※ AIは正確な情報で人間を信用させれる=AIは嘘の情報を一部混ぜて人間を洗脳できる
びっくりするくらい過疎になったの何故
.net 10も出ると言うのに
大量の演算を行って結果を配列に格納するんだけど
演算量(配列のサイズ)が2倍になれば時間も2倍だと思ってたのに
実際やってみると、ものすごく時間かかるのはなんでなのか
メモリを確保する都合かな、50MB程度しか使ってないけど
使ってる命令?
配列の最終項に1個追加するだけで、配列を1から順に追っかけなきゃいけない命令だと
配列が多くなるごとに倍倍で時間かかるわな
アセンブラやCのポインタ処理使って、データを直接ピンポイントで追加していけばそんなことにはならない
>>397 そりゃその演算のアルゴリズム複雑度がO(n)じゃなくてO(n^2)とかそれ以上だからでしょ
配列のサイズだけ見ても意味がない
計算すれば全てをO(1)にすることもできる
50MBも計算リソースがあればまずこのルートを探索する
最初にたっぷり配列確保すればいいのでは
無駄とか知らん
C#に限ったことだじゃないけど、CPUキャッシュに載るかどうかで速度は変わる
配列には一気にドーンや
ちまちま1つづつ入れてるなよ
どう使ってるかに尽きる
>>402が理解できないなら初心者スレ案件だし
>>407 最近のはL3まで含めれば10倍以上ある
やっぱり皆さんazureの仕事が多いですか?
クラウドアプリのコーディングって大半が異常系のハンドリングになってしまうので書いててあんまり楽しくないです
Webアプリならインフラレベルの異常なんてDBのドライバやフレームワークに任せるのが基本だろ?
ビジネスロジック上の異常ケースの話ならクラウド関係ないし、なんでそうなるのかわからん
まさかDB触る度にネットワークの一時途絶とか個別に考慮して処理してるのか?
仕事は24時間稼働してるシステムのお守りで、
プログラミングは趣味なので仕事の暇な時間にツール作ったりゲーム作ったりしてます
>>405 変わるけど、それはめちゃくちゃ高速化に詳しい人がすべてやった後に最後の最後の問題。
ほとんどの人はキャッシュよりアルゴリズムに改善の余地が沢山残されている。
一番手軽なのは逆にキャッシュのアルゴリズムでかなり効果がある場合があるので下っ端でも意識すべし
二次元でy軸捜査してたのをx軸捜査にするとか
今のプログラマでキャッシュを意識しないのはスクリプトのプログラマぐらいで
他は全員意識すべき事項
キャッシュも意識した方がより良いが、アルゴリズムやデータ構造はもっと速度に影響を与える。
アルゴリズムが必要な場所はたいていクラスライブラリになってるから無駄無駄
>>418 クラスライブラリの中のどのクラスを使うかによって速度差が生まれる。
今どきのハードで速度とか考えんとあかんくらいのデータ処理してるとか凄いですね
>>421 お前みたいな馬鹿には縁がない分野なだけだろ
マイクロ秒・ナノ秒単位で応答時間を気にしないといけない環境だと、
アルゴリズム・データ構造・通信データ量・エンコード/デコード・ヒープアロケーション・ディスクI/Oあたりのパフォーマンスは脳が自動的に考えちゃうな。
でもだいたいDBアクセスと通信の遅延がボトルネックになりがち。
ナノ秒単位の応答速度で考えなきゃならないなんて、ハードのアクセスタイミングくらいしか無いぞ
そんな場所はたいていドライバの仕事や
アプリ層じゃせいぜいマイクロ秒単位の速度しか管理出来ないだろ
x ミリセコンド
o ミリセカンド
日本語は正確にね
日本語って言うなら、セカンドでもセコンドでも正しいが?
>>430 secondのoは弱母音であり
弱母音を日本語の母音体系で「ア」以外と認識するのは学習的にも教育論的にも誤っており害しかない。
英語スペルもカタカナもやめてしまえばよい
発音記号で文書書けよw
特にそんな害は無いな
害があると言うなら外語の音をそのまま転写することもできないのにカタカナでやる事こそ害だわ
正論突かれたからって無駄な話を延々とすんなよ
C#でマイクロ秒やナノ秒なんて精度のタイミングなんて作れないよ
「マイクロ秒単位で応答時間を気にする」と「マイクロ秒精度のタイミングを作る」は全然違う話じゃねーのって気がする
前者はミリ秒より下のマイクロ秒のオーダー(〜数百µs)を気にかけなきゃいけない処理のイメージ
後者は正確に1µsごとにティックを刻まなきゃいけないような処理のイメージ
本人の意図とあってるかどうかは知らんけど
GPS受信機側がどうやって精密に位置情報ゲットしてアプリ作れてるか考えりゃ
言語に関係ないってわかるだろうに・・・
>>441 GPSのファームウェアだってなんらかのプログラミング言語で書かれてるんだが
まあ、C#じゃ無いんだろうな
ファームウェアがプログラムじゃ無いって思ってんのかなぁ?
自分の範囲でしか考えられない間抜けなのかなぁ?
>>441 これはローカルの精度の低い情報を外部の精度の高い情報を使って補正する的な話かな?
「マイクロ秒単位で応答時間を気にする」や「マイクロ秒精度のタイミングを作る」とも違うまた別の話よね
所詮C#はライブラリが無いと何も出来ないフロントエンド専用言語さ
そういえば私はc#の専門家だからjsは書けませんってほざいた自称MS MVPのおっさんがいたな
何こいつヤバ、って思ったけど皆さんもそんな感じですか?
スクリプト言語は特殊過ぎて苦手かなぁ
なんせ動作仕様がよく分からないからタイミングとか順番とか掴み難い
HTMLから手打ちでWEBサイト作ってたから書けないことはないけど
仕事でやってるならJavaScriptとPythonくらいは標準言語/共通言語として基礎的なことはできたほうがいいんじゃないかな
>>453 基本的に逐次実行でしょ
イベントのコールバックや非同期のこと言ってるならC#も大差ないと思うんだが
>>456 まあ、reactとかその辺りの話だけどさ
javascriptとかtypescriptとかで記述するフレームワークの内部処理が問題なんだけどさ
昔のJavascriptのイメージの悪さでtypescript食わず嫌いの人は多そう
c#使いからするとかなり親和性高いと思うんだけどね
今時のフレームワークの癖が馴染まないという話になってくるとどうしようもないけど
フレームワークの癖なんかイチイチ覚えたく無い
それでなくても次から次へと新しいフレームワークが出て来るんだから嫌になる
PC88時代のゲームプログラマーは70歳になっても現役なのに
頑張って覚えても出来上がるのはただのhtmlというのが萌えない
逆に React を先に学んだ人が今から WPF を触るのもツラいと思う
どの言語でやるにせよフレームワークを学ぶのは面倒
>>464 そういうひとはBlazorやればいいんやで
最近Blazor触ってるわ
新しいの触るのはちょっと楽しいw
普通に使う分にはいいんだけど
一度表示したら二回目から表示しない
とか言う簡単な条件処理すらバグるからなぁ
Blazorは特殊すぎてこれをメインのスキルにしようとは思えないな
多少他のフロントエンドの心得があるならともかく
お前らが大好きなAI様にBlazorについて代理質問してやったよ。
みんな自宅PC用の自分専用ツールで「エラーにゃ!」とか吐き出してた時期あるだろ?
ケンシロウにしてた時代はある。
壁紙は今もケンシロウ。
「オワッタァ」も「お前はもう死んでいる」も何回言われたか分からん。
会社でWPFつかいはじめて、さらに新しいのを趣味では使いたいのですが、何が最新ですか?
.NET入れろってのはもう仕方ないが
じゃあどの.NET入れるのってなる
・何も入れない(.NET Framework 4.8.1で十分) →◎正解
・最新の.NET入れる (昔のVBランタイムみたいに) →×ダメ
NativeAOT使わなくても単一EXE化できるから好きな方選べば良いよ
単一にしたらセキュリティーホールそのまんま何でしょ?
MS自身も徐々に.NET熱冷めてる感あるよな
AIサポートが入れば入るほどVC++で良いもんな
MS自身はGUIアプリならWebView2やElectron、あるいはC++使ってるからな
WebサービスはさすがにまだC#がメインみたいだけど
ASP.NETで作ったWebアプリケーションをIISでLocalSystem権限で動かしてるのですが、
Webアプリケーションの中でWindowsの時刻変更処理を入れてるのですが失敗してしまいます
AdjustTokenPrivileges関数でWindowsの時刻変更権限を有効にする処理を入れても、エラーコード1300で有効化に失敗します。
何か手は無いでしょうか...
ASP.NETじゃなくてWindowsサービスで時刻変更するプログラムを作ったら?
ntdllのNtSetSystemTimeで普通にできてる
そういうOSに作用する処理はIIS上からやれないようになっとるのでは?
>>488 IISをLocalSystemで動かしててもWebアプリをLocalSystemでは普通動かさないから勘違いしてるのでは?
そもそもなんでWebアプリからサーバーの時刻を変更したいの?
よほど特殊なケースでない限り他のもっといいアプローチがあると思うんだけど
トークン使うところは合ってる
SE_DEBUG_NAME
普通Webサーバーは冗長化するからサーバー同士で時刻がズレて無茶苦茶になりそうだな
>>493 ん?AdjustTokenPrivilegesってWin32のやつじゃないんか
いやセキュリティ上やでないようになってるからエラーなんじゃないか?と思って
IISは使ったことないからよく知らないのではあるけど
LocalSystemアカウントが時刻変更権限を持ってるのは間違いないんだから有効化に失敗するのは方法が間違ってるか対象のトークンが想定と違うかのどちらかでしょ
内部通報で無理なので犯罪者通報
暗黒状態の量子もつれを生成することに成功:世界初の快挙
公開日2025.09.10 18:30:27 WEDNESDAY
https://nazology.kusuguru.co.jp/archives/184832 >>量子もつれが非常に壊れやすく、外界のノイズ(熱の揺らぎや周囲からの電磁波など)によって簡単に消えてしまうことです。
>>このノイズによる量子もつれの崩壊現象は「デコヒーレンス」と呼ばれ、量子技術が実験室の外で広く実用化されるのを妨げる最大の壁となってきました。
◇
・どうやって地上で行えるのですか?
・ 嵐の中や甘風が強い中での車での走行中などどうやって維持しているのかな
・UFOは重力県内でテレポートしている偽物だろう?
◇
・統合失調症から見て犯人不明で周囲の人は知っているかもしれませんが宇宙人だと名乗っているのとテレポート技術を所持している
・7人殺害した
・お前で埴鎮目だ
・殺害した人野事を晩酌で高笑いをしている
・お前「被害者=統合失調症=24実感365日幻聴などの幻覚あり」を人質に立てこもる
・絶対に殺させる「自殺か殺人かは不明ですがさせる」
・コロな症状を引き起こせる
※など上記の事を話してきた
◇
ここにも愉快犯の犯人組織が居るだろう!
>>488です。みなさんありがとうございます。
以下のサイトを参考に特権有効にする処理書いたのですが、なにか間違ってますかね?...
https://qiita.com/mitsu_at3/items/8e5fa9cdbd61a315cb32 いろいろ試して、LocalSystemではなくLocalServiceだと時刻変更できるようで、LocalServiceにimpersonateすることで時刻変更できました。
ただLocalSystemのままでも時刻変えられる気がするんですがね...
とりあえずWindowsIdentity.GetCurrent().Nameとかでアプリが本当にLocalSystemで動いてるか確認してLocalSystemで動いてるならワーカープロセスが持ってる権限をProcess Explorerとかで確認してみるかな
LocalServiceにimpersonateできるだけの権限で動いているとか
LocalServiceがシステム時刻を変更できる権限を持ってるとか
一般的な環境と違うよね
タスクスケジューラーで起動されるときのデフォルトってLocal System?
とりあえず自分はタスクスケジューラーから呼び出される自前のプロセスでNtSetSystemTime出来てるが
タスクスケジューラーは実行ユーザーの設定あるでしょ
1行目見るにそもそも実行ユーザーが分かってない
↓
実行ユーザーの指定できるんだから自分で指定しろ
こういう流れでしょ
なんあらAdministratorsとかのグループ指定でもできるけど
class C {
A a = new A(); // 1
C() {
A a = new A(); // 2
}
}
1と2でAのインスタンスを生成することに違いはありますか?
コンストラクタ内で生成する2でよいような気もしますが
2つ目は
class C {
A a;
C() {
a = new A();
}
}
だよね?
なるほど、
たしかにコンストラクタ内のローカル変数ではダメですね(aは)
お恥ずかしい…
では、
>>512 の1と、
>>513 の違いはなんなのでしょうか
コンストラクタが呼ばれる前に初期化できるものと
コンストラクタの中じゃないと初期化できないものがある
上の例は前者
前者に関してはどっちでもいいっちゃいいけど
フィールド宣言と一緒に初期化コードも書いたほうがわかりやすい
ありがとうございます
やはりそんな感じなんですね
>>512 の 1はコンストラクタより前に初期化されることはテストで確認しました
ご指摘のとおり、コンストラクタ内でしか初期化できないものもあるようですね
ことばが正しくないと思いますが、デリゲートにイベントハンドラを追加するようなコードがそれに当たりました(僕の拙いテストでは)
後半の「フィールドの宣言と初期化が一緒に〜」は納得です
x デリゲートに
o オブザーバに
これでも誤っていそうですがw
lud20251010095138ID:vCoJKF930のレス一覧:
実例出さないとコードを書いたやつの問題なのか読んでるやつの問題なのかわからないな
普通にどっちもありえる
OpenAIが複雑な推論能力をもつAIモデル「OpenAI o1」と「OpenAI o1-mini」を発表、プログラミングや数学で高い能力を発揮
https://gigazine.net/news/20240913-openai-o1/ 宣言してない変数が出てきたらそれに引数割り当てろとかそんなことを言ってるのかな?
new Action<A>(=> Console.WriteLine( s ) );
か
new Action<A>(Console.WriteLine( s ) );
見たいなことなんじゃないかと
Unityって.NETに移植される予定あるの?
ここ5年ほどは.NETばかりが進化してUnityは時止まってる感あるけど
あのースレ違いとは重々承知の上なんですが、ASP.NETの求人ってどんな感じですかね
これまでずーっとC#のデスクトップアプリとかまぁローカルなシステム作りばかりやってきたんですが、いくらなんでも未来がないからウェブへの転職狙ってるんですよね
でキャリア活かそうとASPいじりはじめたんですが今はどこもかしこもjavascriptみたいなイメージで
業務でASP使ってるとかASPで転職活動したとかそういう人いたら話聞かせてほしいんです
どう考えても普通にJavaScriptやる方がいい。
C#履修者ならTypeScript自体の習得は爆速だよ、本気でやれば多分一週間もかからない。何しろ設計者が同じなので書き味に違和感が無くなるのはすぐのはず
問題はReact、Vue、Nextなどフレームワークやライブラリのスキルだけど、正直ここは常にコロコロ変わって勉強が必要な分野なので途中参加でもあまりハンデはないと思う
転職しても、JavaやC#のお硬い言語のキャリアは重宝されるから決して無駄にはならないはず
ASP.NETやBlazorの需要は限定的だし先行き不透明過ぎる
自分も似たようなことしたので頑張って
業務でASPNETCoreバリバリ使ってはいるけど
ASPNET単体の知見が転職活動で役に立つとは思えない
というか、C#ができてHTML/CSS/JavaScriptが読み書きできる人なら普通に無勉強/経験なしでもASPNETで開発できちゃうからセールスポイントにならないのよね
うちんとこはReactみたいなモダン()なフレームワークは使ってないけど、それでもJS/TSの知識は必須
愚直にWeb系の勉強をするのが先かなと思うよ
>>102 >>103 参考になりました。とりあえずHTML/CSS/JavaScript(TypeScript)辺りちゃんとやろうかと思います
ただなぁ……自習してました!じゃなんもアピールにならない気もするんだよなぁ……結局実務経験0だし
プログラミングスクールでも受講してある程度やったと保証になるものを取りに行こうかな
むしろプログラミングスクールの経験のほうが誰もまともに受け取らないよ
自走力がないやつと思われる
素人じゃないだろうしわざわざナメられる道を通るのはオススメしない
そもそもSVNの現場ばかりでgithubの使い方よくわからないレベルだわ
というか世の中10年前にはSVNなんてオワコン言われてたってのが信じられねぇ
個人で使う限りじゃ4つくらいしかコマンド使わんからなぁ
C#13(.net 9)でfieldキーワードが使えるようになるって聞いたのですが本当ですか?
VisualStudioでプレビュー版の.net9入れてみたけど使えないみたいでした
それともプレビュー版だから使えないのでしょうか?
え、一番期待してたのに…
c#でググれの人は何て言ってるんだろう
ありがとうございます
確かに記載が無いので残念ですが今回は見送りっぽいですね、、、
https://github.com/ufcpp-live/UfcppLiveAgenda/issues/94 >たぶんもう C# 13 で入れるもの確定。参考: Language Feature Status
>今入ってないものは入らない。
>field キーワードは「C# 13 GA のタイミングで、 preview で取り込み」みたいな話を
https://aka.ms/dotnet-discord で見た。
だそうです
うーん、微妙か
まぁ.net 10では入るだろうし来年に期待
C#追っかけなくなって知識がdotnet4.5辺りでとまっている…
それ以降はrecordとかしかしらん
メモ帳や日記帳アプリみたいな軽いアプリで、ソースコード公開されてて
コードが初心者にも参考になるようなサイトあるでしょうか?
こんなのじゃあかんのん?
C#で自分だけのメモ帳を作成してみよう!手順・方法を徹底解説します
https://www.sejuku.net/blog/102177 ググったら一分も掛からないで出たけど
>>122 サンクスです、丁寧に書いてあってわかりやすいのですが
設定項目を変更した時の設定反映のタイミングとか
form2からform1にデータ持っていく場合とか
やり直し機能とか
うまい人はどうやって全体まとめてるのかなって
必要な部分だけ他人のコードを読むか自分でひたすら考えて実装してトライアンドエラー
どちらも地力が格段に上がるけど中級者は避けがち
それメモ帳というかエディタで大変な箇所を全部端折った記事だから
適当な公開されてるソース読んだ方がいいね
その適当なのほしいって事やろな
ここの連中は冷たいから教えないんだよね
メモ帳とかの作者さんでソース公開されてる人もC++が多かったり
長大なテキストファイルの先頭から文字数を数えたり
一行の長さを測定して画面右端の折返し位置を決定したり
そういうのって現実的に可能なのか?
普通は穴あきバッファを使う
EZ/VZはlessに編集機能を付けるってユニークな設計をしている
設計自体を知りたいなら 「The Craft of Text Editing: Emacs for the Modern World」が参考になるかと
FINALはdumpすると、MIFESとREDの悪口が書いてある:-p
「穴あきバッファ」なんて初見なんだけどもしかして誤訳じゃない?
エディタのバッファ管理用のデータ構造は効率的な編集をサポートするためで
文字数カウントや行の折り返しの話はどういうデータ構造を使うかとはほとんど関係ないよね
今はGap Bufferもあまり主流じゃなくてPiece TableかRopeが使われることが多くなってる
興味があれば↓この辺読んでみるといい
TypeScriptだしC++に比べるとわかりやすいはず
https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation この辺の話はエディタのコアな部分ではあるけど
>>123の知りたいこととはほぼ関係ない
なにかの文書を画面に表示したい
← 表示したい部分が何行目に当たるか計算する
← 一行に含まれる文字数を知りたい
← プロポーショナルフォントのときはどうするん?
← 行の長さを測定する関数使え
← 一文字ずつ足したり引いたりしながら測定を繰り返す
← 全部の行についてこれやんなきゃかよ?
← やってられない
>>135 >← 表示したい部分が何行目に当たるか計算する
テキストファイルなら頭から読み込むしかなく改行でカウントアップするだけ
>← 一行に含まれる文字数を知りたい
>← プロポーショナルフォントのときはどうするん?
文字数によって折り返し位置が決まるか
表示幅によって折り返し位置が決まるかのどちらか
両方のルールを同時に適用するというのは一般的ではない
プロポーショナルフォントが関係してくるのは後者の場合のみ
表示幅で折り返す場合は指定したRectangleにフィットするよう
よろしくやってくれる表OS提供のAPIがあるので基本的にはそれを使う
APIの内部的では各文字の表示幅を足し算してるが
とりあえずは画面表示部分だけを計算すればいいので
思ってるほど大した計算量ではない
>← やってられない
んなことたぁない
そもそも公開されてるソースがC++多いからなんだというのか
矢印 Unicode(ユニコード)一覧 文字 0g0.org
https://0g0.org/topic/arrows/ 個人レベルで作るなら別にベストな方法じゃなくても良い
とりあえず作ってみたらいい
そして徐々にブラッシュアップしていけばいい
どうせTextBoxかRichTextBox使うから
いちいち行の文字数数えて改行とかという発想がでてこなかったわ
毒されてるんだろうか
質問者の作りたい物に行番号やカーソル位置座標とか要らなさそうだから
テキストボックスで十分だと思う
行列番号、文字数、ファイルサイズ、ドラッグ移動、カラー絵文字、正規表現検索&置換、折り返し
これぐらい欲しい
まじかテキストボックスがカラー絵文字に対応したのか
週末試してみるわありがと
win11で作ったformアプリがwin10で盛大にズレてて頭抱えてる
>>152 何をもってOSに起因する症状だと判断したの?
OSバージョン毎のフレームサイズの差異とか気にもせずに処理でも書いたか?
OS関係なく単にディスプレイのスケーリングの違いでは
フォントとか配置とかやり直しはMacOSのあるあるだと思ってた
ライブラリを使用するために下みたいなコード書いた
ライブラリ内でIHoge.Method();の機能を上書きしたいのとHogeで設定されるさまざまな機能を使いたいがためにIHogeを実装したHogeクラスを継承してMethod();を隠蔽、そのうえでライブラリから呼び出されるようにIHogeをさらに継承?実装させてる
ちょっと無理矢理感強いけどこれはアリですか?
ライブラリの中
~
IHOGE.Method();
~
public interface IHoge
{
public void Method();
}
public class Hoge : IHoge
{
public void Method()
{
元の処理
}
}
自前で作ったクラス
public class NewHage : Hoge,IHoge
{
public new void Method()
{
上書き処理←やりたいこと
}
}
>>158 Hoge.Methodにvirtual
NewHage.Methodでoverride
>>158 それがやりたいことなら別にいいんじゃね?
Hogeの他のメソッドがMethod()を呼ぶとか
Method()がHogeの他のメソッドを呼ぶとかの関係が出てくると
newを使わない場合に比べるとバグるリスクが高くなるような気はする
インターフェース+コンポジションにしておけばバグるリスクは低くなる
その代わりに多少書く手間がかかる
>>160 Hogeはライブラリの中の実装だからvirtualにできないのつらみ
>>161 なるほどありがとう
てかVisualStudioが教えてくれた
緑波線でnewしてくださいって
public new 戻り値の型 メソッド名
ML.NETを試してみたら思いの外お手軽で面白いな
アプリにさくっと組み込めそうだ
.NET MAUIで試したことあるけどWindowsはいけたがAndroidではトレーニングでエラーはいた記憶
>>159 サンクスです、これはすごいな
解説がおおくてわかりやすい
これのソースコードがダウンロードできたらよかったのに
CookieってSystem.Text.Jsonでシリアライズ・デシリアラズするとDomainKey変わっちゃってSet-Cookieで同じ名前のクッキー来ても違う奴判定されてダブるんだな
正確に言うと先頭ドット有りだと変わらないのと、BinaryFormatterやNewtonsoft.Jsonで非パブリックフィールド含む全フィールドをそっくりそのままストア・ロードさせれば変わらないんだけど
ZipPlaってファイル管理ソフトのソース持ってる人いる?
居たらアップして欲しい
>>171 ぐぐったらGitHubにForkされたのがあるようだぞ
オリジナルからどの程度手が入ってるか知らんけど
>>172 自分もそれは見つけたんだけど、何を変えてるのかもハッキリしないんですよね
なのでオリジナル持ってる人が居たらと思いまして
WinFormsってWindowのクラスネーム決められないの?
Win32のFindWindowのClassNameで探させたいのだけど
protectedなCreateParamsプロパティをオーバーライドしてClassNameを書き換えることはできる
独自名ならとりあえずRegisterClassは必要だけどそれだけで済むかどうかは知らん
C#側のプロパティは書き換えられても実際の内部の値はそういうことしないと無理そうか
RegisterClassExしてやろうとしたことあるけど
CreateParamsでRegisterしたClassName指定してもエラーになって
それで良く分からんまま放棄したな昔
人間が垂れ流した知識を混ぜるだけのAIが、人間が知らないことを教えられるわけないだろw
世界中のどこかで語られたかもしれない事実をそこらの人間がすべて知ってると思うのがおかしい気がする
つーかさWin32APIのCreateWindowで作ったウィンドウをC#にAttachする程度基本的な仕組みぐらいあるやろ
あるやろ…
CSharp初心者が学習始めるなら何からがおすすめ?
多分IIS?使ったウェブアプリになるんだけども
Javaでのアプリ開発経験はあり
SetWindowLong
SetWindowLongEx
科学 + 5ch
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
http://2chb.net/r/scienceplus/1733576027/ コメントに面白いことが書かれている
盲目的にvar使うなとは思うけど、一切使うなはないなぁ
まあマイクロソフトのサンプルにも使ってる例あるしな
varで参照型を扱うとnullableになるのはどうにかしてほしい
推論型なんだし、必要に応じて使えばいいんじゃね?
objectならともかく
varが絶対必要なのって匿名型使うときだけだから、必要に応じて使う、だとvarはほとんど用無しになっちゃう
戦争に参加するつもりはないが仮にvar使うんなら必要に応じてじゃなく基本varにしないと
c#は基本varでいいよね
多分大体のc#er?はvarじゃないときにだけ理由を気にするんじゃないかな
初期に頭のいい人は一番先に varに飛び移った
その後みんな気が付いて移行した
今でも使わないのはご老人
インターフェース分離の原則が分からない
「必要のない振る舞いを実装しない」のは適切だと思うんだけど、ポリモーフィズムとの組み合わせが悪いように思う
interface IBird { string Name { get; } }
interface IFlyable { void Fly(); }
// ペンギンは飛べないので IFlyableを実装しない
class Pengin : IBird { ... }
class Eagle : IBird, IFlyable { ... }
のようにした場合に、プログラムが List<IBird> birds のような形でデータを持つと、「飛べる鳥がいる」という情報が型から消える
foreach (IBird bird in birds) {
Console.write(bird.Name);
if (bird is IFlyable flyable) {
flyable.Fly();
}
}
「飛べる鳥なら飛ばす」ようにしたい場合、インターフェースを分離する場合だと上記のように is でキャストするしか無さそう?
IBirdで扱っているのに「インスタンスは IFlyable である可能性がある」という情報に依存してるのに少し違和感があって、より綺麗な解決策があれば知りたい
レス:1-200 201-400 401-600 601-800 801-1000 ALL
このスレへの固定リンク: http://5chb.net/r/tech/1719656321/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「C#, C♯, C#相談室 Part98 ->画像>1枚 」を見た人も見ています:
・エイブル相談室
・C++相談室 part137
・C#, C♯, C#相談室 Part93
・自営業 悩みごと相談室 52
・自営業 悩みごと相談室 48
・C#, C♯, C#相談室 Part95
・シーバスなんでも相談室 17©3ch.net
・アパートマンション経営なんでも相談室【152号室】
・室井佑月「(日の丸マスク)謝罪し訂正したのだけど、お詫びしろ、という意見…。弁護士に相談…」 ネット「被害者面」「実害出てるけど? [Felis silvestris catus★]
・シーバスなんでも相談室39
・初心者の為のボート相談室 Part1
・■一級建築士設計製図試験相談室(192室)■
・シーバスなんでも相談室71
・シーバスなんでも相談室70
・■一級建築士設計製図試験相談室(180室)■
・必ず誰かがなんたら相談室 Part.3
・綾子88kg♪の恋愛何でも相談室★
・鍼灸マッサージ質問相談室パート16
・研究室配属について相談させてください
・新品限定ノートPC購入相談スレッドその99
・自作PC初心者パーツ購入相談事務所【53列目】
・エアロバイク 購入相談専用スレ
・ゲーミングPC 相談/雑談スレ Part.65
・友人の変食がやばいと思うんですけど…【相談です】
・明治大学法律相談部に集団人権侵害を受けた
・クロスバイクの雑談&購入相談145
・Office 2000総合相談所
・岸田首相、金正恩氏との首脳会談に意欲
・【初心者】ダイエット質問・相談スレPart231
・嫁の浮気相談スレ PART27
・【相談】彼女と5年付き合ってるんだが…
・Excel総合相談所 141
・【初心者】ダイエット質問・相談スレPart225
・【初心者】ダイエットの質問・相談スレPart159
・ガイジの相談スレ
・自作PC初心者パーツ購入相談事務所【76列目】本物
・▲ギコの楽しいデスクトップPC購入相談▼102台目
・結婚相談所★オーネット★ツヴァイ★ゼクシィ
・▲ギコの楽しいデスクトップPC購入相談▼105台目
・【初心者】PC初心者 購入相談スレ 6台目
・2ch内有志による犯罪予告の相談・誘導スレ★4
・【初心者優先】デジタル一眼質問・購入相談室 163
・【ダイナース】黒茄子会員談話室47【プレミアム】
・C++相談室 part154
・アパート経営なんでも相談室【135号室】
・アパートマンション経営なんでも相談室【151号室】
・【初心者歓迎】デジタル一眼質問・購入相談室 181
・【ガルパン】マライ・メントラインの勝手にお悩み相談室「困っています。全力で『ガルパン』を推すために私は何を為すべきでしょう」 [鳥獣戯画★]
・発信者情報開示請求照会書届いた後の相談スレ21修正
・田中邦衛相が初会談
・ドイツ戦車閑談室 その6
・【初心者】ダイエット質問・相談スレPart229
・Dr林のこころと脳の相談室17
・2ch内犯罪予告の通報依頼&相談・雑談スレ★5
・【皇室】首相、旧宮家の皇籍復帰も選択肢
・【初心者】ダイエット質問・相談スレPart218
・Mac 購入相談スレッド Part31
・ワイの進路相談&受験記録スレ
・■一級建築士設計製図試験相談室(183室)■
・鍼灸マッサージ質問相談室パート17
・【本家】船乗りなんでも相談室 22【内航船】
・クロスバイクの雑談&購入相談185
・ゲ一ミングPC 相談/雑談スレ Part.51
・ゲーミングPC 相談/雑談スレ Part.92
・【自転車】-ロードバイク購入相談スレ【135台目】
08:09:16 up 5 days, 17:15, 0 users, load average: 41.58, 58.94, 57.67
in 0.10361409187317 sec
@[email protected] on 101021
|