- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
575 :デフォルトの名無しさん[sage]:2016/12/29(木) 00:38:59.83 ID:ICm4kcbN - >>573
ターゲットフレームワークが4以降なら直接IEnumerable<object>にキャストできる Dictionary<,> は IEnumerable<KeyValuePair<,>> を実装している .NET4以降ではIEnumerable<>は共変だからIEnumerable<派生>をIEnumerable<既定>として扱える あと関係ないけど.NETの場合ジェネリックの型引数は 1つの場合はT、複数の場合はTKey, TValueのようにT〇〇と名付ける決まりだから Java臭いキモい書き方はやめろ
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
576 :573[sage]:2016/12/29(木) 00:49:52.62 ID:ICm4kcbN - すまん訂正
KeyValuePair<,>は値型だから不変だな 直接キャストはできないので>>572で全要素を個別にボックス化してやる必要がある
|
- C#, C♯, C#相談室 Part91 [無断転載禁止]©2ch.net
577 :デフォルトの名無しさん[sage]:2016/12/29(木) 00:58:24.25 ID:ICm4kcbN - あと >object型の値がIEnumerable<V>を継承してるか、継承していたら変換する だけど、
IEnumerable<object>のかわりに単に非ジェネリックのIEnumerableにキャストすりゃいいよ IEnumerable<>はIEnumerableを継承しているので、 IEnumerable<>なら要素が値型だろうが何だろうがIEnumerableには確実にキャストできる どうしても<object>にしたいなら ((IEnumerable)obj).Cast<object>() で変換できる
|
- ★★Java質問・相談スレッド179★★ [無断転載禁止]©2ch.net
359 :デフォルトの名無しさん[sage]:2016/12/29(木) 01:22:03.23 ID:ICm4kcbN - 無駄に複雑になるからだよ
フィールドが多態性を持つとなると仮想メソッドならぬ仮想フィールドアクセスみたいなものが必要になる static final なフィールドはインスタンスメンバじゃなくて単なる定数だから、 実質的にはどこか他のクラスに定数を定義するのと変わらんので特に害はないというわけ 害はないけど特に必要性もないので、C#だとインターフェース内では一切フィールド使えなかったりする
|
- ★★Java質問・相談スレッド179★★ [無断転載禁止]©2ch.net
361 :デフォルトの名無しさん[sage]:2016/12/29(木) 09:41:30.42 ID:ICm4kcbN - 細かいけどインスタンスメソッドはインスタンスにメモリを割り当てないぞ
インスタンスメソッドは実際にはインスタンスではなくクラスに属していて、インスタンスの型情報を基に各クラスのメソッドを検索する フィールドも同様にまずクラスを見てアドレスを求めればいいのでやろうと思えば技術的に難しくはないはずだよ Java設計者が実装コストに見合ったリターンがないという判断をしただけ
|
- ★★Java質問・相談スレッド179★★ [無断転載禁止]©2ch.net
364 :デフォルトの名無しさん[sage]:2016/12/29(木) 16:35:12.28 ID:ICm4kcbN - >>363
フィールドも宣言と実装を分ければいい話
|
- VB.NET質問スレ(Part43) [無断転載禁止]©2ch.net
457 :デフォルトの名無しさん[sage]:2016/12/29(木) 18:11:55.59 ID:ICm4kcbN - 今時ADO.NETなんて括りに意味はないぞ
Entity FrameworkとかもADO.NETに含まれているらしく、 もはや「.NETのデータベース関連の機能」というだけのふわっとした総称でしかない 単純に低レベルAPI使って普通にSQL投げたいだけならDbConnectionのあたりを適当にググれば十分
|
- ★★Java質問・相談スレッド179★★ [無断転載禁止]©2ch.net
369 :デフォルトの名無しさん[sage]:2016/12/29(木) 23:12:51.66 ID:ICm4kcbN - >>368
理解が甘い。 それだけの理屈だとメソッドもインターフェースに宣言できなくなっちゃうぞw インターフェースで多重継承の問題が回避できる理由は、 インターフェースのメソッドは宣言のみで実装を持たないので、 継承階層上で同一のインターフェースがいくつ重複して継承されてようが 最終的にメソッドの実装は一つだけになるから。 そして、君はフィールドの宣言と実装は不可分であるという前提を暗に設けているけど、 C/C++のようにフィールドの宣言と実装を分離できる言語も存在する。 Javaがそうしなかったのは「そう判断したから」に過ぎない。
|