X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 9e9f-LwdJ)
垢版 |
2018/10/04(木) 18:56:38.41ID:JnxMNCXd0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1533466544/
■コードを貼る場合は↓を使いましょう。
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
0792デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/04(火) 04:22:30.94ID:16QpsEK/0
>>790
ありがとう。解決しました。
InitializeCompornent();の呼び出しが消えていた。
なんでだろ。消した覚えはないんだけど。
0793デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/04(火) 04:55:27.00ID:16QpsEK/0
>>791
interfaceを使えないかトライしてみましたが、どうもうまく行かないです。
ClassFileはIjsonをインターフェースする必要があって、Ijsonのinit()はClassAのプロパティや
変数の初期化なのでClassAの中でしか実装できません。なので
ClassFile:Ijson<ClassA>
ClassA:ClassFile<ClassA>
のような構成になります。しかし問題があります。
問題:ClassFileの中ではinit()は実装したくないのに、実装を余儀なくされるが、初期化したい変数は
ClassAの中にあるので困る。
0794デフォルトの名無しさん (ワッチョイ b39d-hzet)
垢版 |
2018/12/04(火) 05:04:31.89ID:16QpsEK/0
clsAのインスタンスに代入する方法ってこれでいいのでしょうか?
public class clsA: clsJson <clsA>
{
public void ParamLoad() {
clsGamenParam v = this;
v = base.ParamLoad();
}
}

public class clsJson<T>{
public T ParamLoad(string IniName = "") {
T param = default (T);
param = deserialize(json);
return param;
}
}
0802デフォルトの名無しさん (アウアウエー Sa52-70Pl)
垢版 |
2018/12/04(火) 23:34:36.38ID:S3l73Gw8a
>>798
円や直線みたいな単純な図形でアンチエイリアスとかも不要なら
確かVBer向けのシェイプコントロールってのがあったはずだから、それを使えば一発だね
http://www.atmarkit.co.jp/fdotnet/dotnettips/781winlineshape/winlineshape.html
描画するんじゃなくて子コントロールを加える形になると思うけど
0803デフォルトの名無しさん (スプッッ Sd5a-KXwy)
垢版 |
2018/12/05(水) 13:01:06.99ID:6cU8181gd
シングルトンパターン実装が面倒だからstatic実装をしてしまう私は雑魚なのでしょうか
いつインスタンスが作られるかぐらいの差しかないんじゃないのぉぉぉお起動時に一度だけ呼ぶ使われ方ならぁぁぁあ
0805デフォルトの名無しさん (ブーイモ MMba-D04G)
垢版 |
2018/12/05(水) 13:24:54.14ID:mkn+H/81M
>>803
グローバル変数を作る目的でシングルトンにするくらいなら、Globalクラスでも作ってそのstaticフィールドとして持たせて共有したほうがマシ
シングルトンが用いられる大抵のケースでは、アプリでクラスAのインスタンスが一つしか必要とされないという要件を、
誤ってクラスA側に持ち込んでしまい不必要な制限をクラスAに対して与えている
基本的にシングルトンはアンチパターンであり、使うべきではないと考えておけばいい
0812デフォルトの名無しさん (ワッチョイ abeb-3M3s)
垢版 |
2018/12/06(木) 17:22:48.54ID:PXx1OaoO0
そういやDIコンテナってどういう仕組みになってんのか全然わからん
コンストラクタの引数をインターフェイスにするだけで、登録済みのオブジェクトを自動的に注入してくれるわけだけど・・・・
あれってコンストラクタの呼び出し側は一体どんな仕組みになってるの?
そもそも引数のインターフェースを増やそうが減らそうがコンパイルエラーが起きないって、呼び出す側は一体どうなってるのかしら
0814デフォルトの名無しさん (ワッチョイ abeb-3M3s)
垢版 |
2018/12/06(木) 17:45:26.67ID:PXx1OaoO0
>>813
ありがとう
リフレクションは全然使ってなかったので勉強してくるよ
0815デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/06(木) 23:07:45.72ID:LqRlvnk/0
リフレションとかバカしか使わないわ
0818デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/06(木) 23:47:06.96ID:LqRlvnk/0
リフレクションはウンコみたいな依存関係を作る元凶だからな
まともなヤツならまず使わない
0821デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/07(金) 00:12:46.91ID:0/x3pMw+0
こうやってクソみたいな依存関係のあるクソコードが量産されていくのがよくわかる
0822デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/07(金) 00:14:25.89ID:0/x3pMw+0
AというオブジェクトからBというオブジェクトにアクセスする場合
よほどの理由がないかぎりBからAにアクセスすることは避けないといけない

できるだけコンポジションにするべき
この場合、AがBを内包するようにする

コレはシロウトでなければ常識の問題だからな
0824デフォルトの名無しさん (ワッチョイ d9e3-k/Y9)
垢版 |
2018/12/07(金) 00:27:55.79ID:OtTuCL9w0
>>822
> AというオブジェクトからBというオブジェクトにアクセスする場合
> よほどの理由がないかぎりBからAにアクセスすることは避けないといけない
何で?

例えば俺がAでお前がBだったとする
俺からお前を殴るかもしれんし
お前から俺を殴るかもしれん

どちらにしろ
お前はすでに死んでいる
0827デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/07(金) 00:32:37.34ID:0/x3pMw+0
低学歴知恵遅れほど
継承とリフレクションをうれしがって多用するからな

まさに
オブジェクト指向に低学歴知恵遅れは
キチガイに刃物
0831デフォルトの名無しさん (ワッチョイ e18a-nOOm)
垢版 |
2018/12/07(金) 03:53:19.21ID:4tv6nv6l0
64bitの.NET Core でSQLite使いたい時はどれ落とせばいいんですか?
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

.NET Core用のは以下の1つしかないっぽいけど、これ使うと、"間違ったフォーマットのプログラムを読み込もうとしました。"とエラーが発生します。
Precompiled Binaries for the .NET Standard 2.0 (.NET Core 2.0)

過去の.net frameworkの経験上、bit違いでこのエラーが出るようなんですが、Core用SQLite.dllが上記しかないので、どうしようもない状態です。
0833デフォルトの名無しさん (ワッチョイ 89f7-e/g/)
垢版 |
2018/12/07(金) 08:35:25.92ID:TvdhMF8B0
気ままにREFLECTION
0837デフォルトの名無しさん (ワッチョイ 9306-n9Ol)
垢版 |
2018/12/07(金) 09:28:53.50ID:0Ncculaf0
>>831
UWPでは、System.Data.Sqliteとは別系統のMicrosoft.Data.SQliteというMSご謹製のライブラリがあるのでそっちを使ってください
ちなみにDapperはマトモ動きませんのでEF Core使うか直にADOやらないと駄目だけどね
0840デフォルトの名無しさん (ワッチョイ 2b80-7TzT)
垢版 |
2018/12/07(金) 11:35:57.70ID:cSzYN2du0
漏れは、様々なアプリから使うために、C:\sqlite3 に、すべてを入れているけど。
ただし、C# は使わないけど

sqlite3.def, sqlite3.dll, sqlite3.exe

sqldiff.exe, sqlite3_analyzer.exe
0843デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/07(金) 21:14:47.96ID:0/x3pMw+0
やっぱりバカはいまだにうるう秒がどういうもんなのかすら分かってない
低学歴っていちいち低学歴を自白するからな

そして低学歴の知ったかドイチェ語
すぐに分かるのが恐ろしいわ。。。
0844デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/07(金) 21:21:23.93ID:0/x3pMw+0
>>843
コレは誤爆だ

リフレクションで問題になるのは
オブジェクトの依存関係になるのは常識だからな
0847デフォルトの名無しさん (ワッチョイ 5b93-Hr0L)
垢版 |
2018/12/08(土) 01:40:50.37ID:bqexRm9V0
暫く泳がせてたが
オブジェクトの依存関係はリフレクションとは直接関係ないけどな

メタデータ触るには不可欠だし
ライブラリ周り作るにも必要なケースは多い

自称上級者が継承やらリフレクションや使ってドヤって害悪なのは同意
0849デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 15:59:48.92ID:f0K+9NgH0
ぜんぜん違う

このスレにいるような池沼が作らなければ
クラスライブラリも階層(ココで階層は継承の階層ではない)や種類で作るからな

低い階層に行けばいくほど単純な簡単な機能を提供するクラスになる
階層は完全に分離させて独立したライブラリにする

そして明確に種類の異なるプリミティブがある場合は
ライブラリを完全に分離させて独立したライブラリにする

その上にアプリケーションを実現するクラス群がのっかる

低学歴知恵遅れが作るとすべて同じ階層で同じ種類になる
0850デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:01:14.77ID:f0K+9NgH0
当然、低レベルな部分を実現するクラスライブラリと
アプリケーションが主に利用する中間層のクラスライブラリと
アプリケーション自体を記述するクラス群は
シロウトでもないかぎり完全に分離するからな

低レベルな部分を実現するクラスライブラリは
当然、中間層のクラスライブラリやアプリケーション自体を記述するクラス群を
参照することはまずない

アプリケーションが主に利用する中間層のクラスライブラリは
アプリケーション自体を記述するクラス群を参照することはまずない

低学歴知恵遅れが作ると酷い依存関係ができる
コレはオブジェクト指向関係なくライブラリの基本だからな
0851デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:04:06.83ID:f0K+9NgH0
組織でたとえるならこうなるからな

 経営者クラス 社員をこき使う
  ↓
 社員クラス ← 派遣をこき使う(職階ごとの複数の中間層)
  ↓
 派遣クラス ← キミラが担当するような低レベルな部分の単純作業(つまりキミラ)

派遣は社員の作業も役員の作業もしない
社員は役員の作業はしない

関数の行数が多いのは
作業を整理して作業を手順化して
派遣にうまく単純作業を割り当てれてないのと同じだからな
つまり、人に仕事させないと自分の作業が増える

キミラは派遣ドカタだからな、そういう作業はできないのは分かる

当然作業ミス(例外)が発生してスルーし続けてたら上までいく
0853デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:05:53.18ID:f0K+9NgH0
例えば扱うビジネスの領域が違えば
部門を分けることになる

会社に複数の部門があっても一つの会社だからな
種類で分けるというのはそういうことになる

キミラみたいな一種類の単純作業しかしてないヤツラには関係ないワケ
0854デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:06:15.85ID:f0K+9NgH0
というわけでな
キミラは刺身にタンポポのせる作業に戻りなさい
キミラにはムリ
0855デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:10:10.36ID:f0K+9NgH0
いちいちタンポポ載せてる作業経過報告はいらない
作業の補助とか、いちいち次になにをするかとかとか指示はしないからな

タンポポが地面に落ちたとかこのタンポポのハナ小さいとか
そういう報告(リフレクション)もいらない
捨てときなさい
それぐらい分かるだろう

タンポポが足りなくなりそうになったら
この台帳に書いときなさい
コレだけはたまに見といてやるからな

キミラのコーディングは自身がおかれてる立場と
まったく一致してるワケ
0857デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:26:20.22ID:f0K+9NgH0
所詮、派遣ドカタ
残念なことに派遣ドカタのレスなんか
すぐにわかるわ
0858デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
垢版 |
2018/12/08(土) 16:28:18.82ID:f0K+9NgH0
バカに限って抽象化とかいって
サルみたいにうれしがって継承するからな

破綻はそこから始まる

しばらくほっとくと
データ受け渡しするために
無秩序に相互参照しはじめる

こうなったら終わりの始まり
0859デフォルトの名無しさん (ワッチョイ 93a5-T+E4)
垢版 |
2018/12/08(土) 16:41:33.73ID:MYwA5eIj0
質問です
ifの条件に配列を使いたいとき、例えば
if( 配列[ ]=={1,2,3,4} )
みたいにやるにはどうするのが一番簡単ですかね
配列[0]==1&&……で一個ずつ作るしかないですか
0867デフォルトの名無しさん (ワッチョイ 2b80-ZtDu)
垢版 |
2018/12/08(土) 21:20:12.98ID:tBodI9MC0
オレはケンカなんか売ってない
バカが真人間になるように矯正してるだけだからな

バカはオレにケンカ売ってるつもりらしいな
0868デフォルトの名無しさん (ワッチョイ 2b9a-e5Zh)
垢版 |
2018/12/08(土) 21:48:06.02ID:3kcswmur0
>>859
「一番簡単」が何を求めているのかわからないが、比較するものの数が決まっているのなら「配列[0]==1&&……で一個ずつ作る」のが「速くなる」
汎用にしたいのならラムダもlinqも俺自身が使えないのでメソッドにすると例えば
private bool hikaku(int[] arr1, int[] arr2)
{
if (arr1.Length != arr2.Length) return false;//配列の長さのCheck
int i = 0;
for (; i < arr1.Length; i++) if (arr1[i] != arr2[i]) break;
return i == arr1.Length;//全部一致したら最後まで止まらない
}
メソッドを呼び出すのはそれだけで速度的にだいたいロスになるので「速い」動作を求めるのならこれも勧めない
linq使うのが一般的だと思うけどそれは他の人に聞いてw
0870デフォルトの名無しさん (アウアウエー Sa23-M/db)
垢版 |
2018/12/08(土) 22:32:50.81ID:uQ6Iu0Wba
まあ、>>861で済んでるとは思うんだけど、あえて付け加えるならこう?
public static bool Equals<T>(this T[] x, params T[] y) where T:IEquatable<T>
{
  return x.SequenceEqual(y);
}

今は(というか10年前からだけど)new[]{...}が使えるからparamsは有難みが薄いかもしれない
0871デフォルトの名無しさん (ワッチョイ 139b-rUSZ)
垢版 |
2018/12/09(日) 01:48:43.58ID:XoVxwZDP0
vbで言う、戻り値もらう時Function 〇〇の〇〇の部分って変数はそのまま使えない?
あとcallはないみたいだけど、人が書いたコード読む際にこれはなんか値取ってきてるなとか何か計算しにいってるなとか一目で分かるには慣れるしかないですかね?
0872デフォルトの名無しさん (ワッチョイ 01d2-WxAZ)
垢版 |
2018/12/09(日) 02:03:01.52ID:bhezjmzk0
〇〇 = 戻り値 は return 戻り値; じゃね。

Call は戻り値とかではなくて戻り値のない関数(Sub)を呼ぶときに引数の部分を () でくくりたい場合に使うものではなかったっけか。
戻り値を受け取るかは呼ぶ側で 変数 = 呼ぶ関数(); になってれば受け取るんだろうし、
呼ばれる側が戻り値を用意してるかどうかは呼ばれる側の関数の(戻り値の)定義が void になってれば返さないんだろうしってことじゃダメなん?
0878デフォルトの名無しさん (アウアウエー Sa23-M/db)
垢版 |
2018/12/09(日) 12:17:17.42ID:qjppHIrra
VBでもCallなんて付けない方がいいと思うしそれが普通だと思うけど、
>>876の内容はCallキーワードの使用一般を非推奨とはしてないじゃんw

これが非推奨と言ってるのはたぶん、
Call Math.Min(1, 2)
みたいな使い方。これはCallはC系の言語でいう式になってない、つまり
Dim x = Call Math.Min(1, 2)
と書けないことも一因か?

あと、>>871
>vbで言う、戻り値もらう時Function 〇〇の〇〇の部分って変数はそのまま使えない?

これはどういう意味なの?
まったく分からん
0883デフォルトの名無しさん (ブーイモ MMb3-PCBP)
垢版 |
2018/12/09(日) 13:02:30.07ID:G5eD25r9M
>>878
いや呼び出しが識別子で始まらない場合って書いてあるでしょ
サンプルコードにあるように、New Hoge.Method() とか、ラムダ式を即時呼び出しするケース
これは純粋に構文解析上の制限だろう
0884デフォルトの名無しさん (アウアウエー Sa23-PCBP)
垢版 |
2018/12/09(日) 13:13:46.66ID:QJ+QHutHa
BASIC系ではステートメントは原則的にステートメント種別を示すキーワードで始まらなければならず、式が単独でステートメントになることはできない
これは構文解析を楽にするための制限で、大昔の言語ではわりと一般的なスタイルだ
ただ、さすがにそれは不便だということで、識別子から始まる式については例外的に単独でステートメントになることができる
>>876のサンプルコードにあるようなケースでは四季がステートメントと見做されないから、例外的にCallが必須になるということだね
0885デフォルトの名無しさん (アウアウエー Sa23-M/db)
垢版 |
2018/12/09(日) 13:16:52.52ID:qjppHIrra
>>883
ああ、なるほどそうだねごめんw
MSDNの記事読んでなかったよw

VBは
(New TheClass()).ShowText()
と書けないのか。ダメな理屈がよくわからんなあ

ラムダ式の即時呼び出しは便利そうだね。
必要になった記憶はないし、戻り値を握りつぶすんじゃ相談室の方の661の
質問みたいなことはできないが
0886デフォルトの名無しさん (ワッチョイ 89a5-aoeu)
垢版 |
2018/12/09(日) 13:48:52.09ID:TF/l/AmT0
文法の違いにケチつけても意味無いだろ
外国語覚えるつもりで勉強しろよ
0889デフォルトの名無しさん (ワッチョイ 5b93-Hr0L)
垢版 |
2018/12/09(日) 14:54:32.29ID:3jtGHyYw0
>>878
vbではfncHogeの戻り値を設定するのに
return 1
fncHoge = 1
のどちらの書き方もできたねん
関数の中で、関数名を変数名として使えた

再帰処理なんか考えたら
パっと見紛らわしくて
可読性に問題あるけどね
■ このスレッドは過去ログ倉庫に格納されています

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