X



ふらっと C#,C♯,C#(初心者用) Part130 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001ななしぃ♯ 転載ダメ©2ch.net (ワッチョイ 93aa-SrFS)
垢版 |
2017/07/18(火) 06:40:45.47ID:mH9qbH+m0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part129
http://mevius.2ch.net/test/read.cgi/tech/1497000961/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0711デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 10:40:27.67ID:+QB1TWiX0
>>701
そう、その言葉をまっていました。そのリファクタリングを掻い摘んで説明してください。
0713デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 10:45:36.83ID:+QB1TWiX0
>711
自己解決した。
0714デフォルトの名無しさん (ワッチョイ ad6e-Fy2N)
垢版 |
2017/08/27(日) 10:46:17.35ID:J8/CoBlN0
>>710
実際、大したメリットはない
最近の流れとしては、Web分野でも一時期バインドが流行っていたけど結局はユーザー操作時の代入に回帰しつつある
所詮は「手作業で代入すんのめんどくせえ」ってだけの問題であって、バインディングはそれだけのために過剰な複雑さを持ち込みすぎている
0716デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 10:48:36.94ID:+QB1TWiX0
リファクタリングで
★継承を委譲に置き換える
 継承では基底クラスのすべてのメンバを、サブクラスに許さなければならない。
 基底クラスの一部だけの機能を利用する場合は、継承の代わりに委譲を使う。

これはどういう意味?
0719デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:00:37.70ID:+QB1TWiX0
>>714
デザイン(View)はアーティストの俺が書いて、「土方ロジックは知らん。お前等に任した」っていう時にはいいかもしれない。
しかしその場合にもボタンと同期してデータを切り替えないといけないよね。その仕組みってどうなってるの?
ボリュームを回すから、データはそれに合わせてかえてよねっていうようなこと。
0720デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:01:25.93ID:+QB1TWiX0
>>718
VB6をC#に変更するんだが、VBソフトを解読する場合にはどこから手をつける?
画面数が70程度、クラスが10個、標準モジュールが30個位ある。
とりあえずクロスリファレンスを作ってみようとおもってるんだが、何か方法論とかないかなーとおもっている。
そこでリファクタリングをするというのは一つの手ではある。
0721デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:04:21.15ID:+QB1TWiX0
VB6ってのは知らないかもしれないが、VBAと同じで標準モジュールというのは
グローバル変数で、これが大量にあるので難儀している。
0722デフォルトの名無しさん (ブーイモ MMf1-Fy2N)
垢版 |
2017/08/27(日) 11:05:21.87ID:GFDdydysM
>>716
お前の会社の経営が厳しくなり、無能なお前をリストラしてお前の業務を外部委託することになったとする
そのとき、外部の人間を社内に常駐させるか?、それとも社外に丸投げするか? ということ
社内とのやりとりが多い業務であれば前者の方がスムーズだろうけど、
そうでもないなら後者の方が安上がりだし委託先を後で変えることも容易で好ましいだろ
0724(スプッッ Sdca-Vrzw)
垢版 |
2017/08/27(日) 11:21:08.14ID:0sFxQlMgd
>>719
デザインセンター持ってる会社なら、ホントに分業出来るから楽だと思うよ。
ボタンと同期して中身変える、ってのは、ダミーデータ返す関数と、メソッドのスタブ最初に用意して、それを渡す。なかったら「くれ」って言ってくるし。
どちらも無意味な不幸の無いプロジェクトになる。
0725デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:21:43.63ID:+QB1TWiX0
>>722
分かり安い説明だが、愛がない。そこもかなり重要だと思う。ところでWPFって
やったことないのだが、やってみたい。
最初はVB6のフォームのコントロールのリストと位置を拾いだせば画面は自動的に変換できそうなので
そうしようかと思ったのだが、XMALでやるってのは難しいだろうか?
0726デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:25:19.91ID:+QB1TWiX0
>>724
そうだね。アーティストの俺には土方仕事を丸投げできるからかなり有利かも。
0728デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:49:16.29ID:+QB1TWiX0
>>仕様書が無いのなら動作確認して自分で仕様書書くところから

ソースを解読してその仕様書を書く手順を考えている。うまくコンパイルして動かすこともできたん
でソースを解読しつつ整理して、最終的に変換をする。
具体的には
整理
1.クロスリファレンスをだしてグローバル変数を整理
2.画面がやたら多いので手書きで書き直すのはとっても大変だ。
しかし殆どはパラメータの設定のような単純な画面なので、画面の書き換えはプログラムで変換できそうだ。
しかし内部のイベントロジックをどうするかだな。画面はC#でもVBでも好きなように変換できるが、ロジック
はC#に変更するのは正気の沙汰ではないな。
やはりVB.netに置き換えるべき。となるとやはりVB.NET Winform以外の選択肢はないのか?
0729デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 11:56:58.26ID:+QB1TWiX0
>顧客から要望聞いてSEが再設計して仕様書作るのが正しい

もともと正しくないところから出発しているので、正しい方法は取れない。唯一できるのは
自由に作れるということだけ。しかも動きさえすればいいというレベルの客。ただし.netで
作るというのが条件でソースも提出することになっている。C#でもVBでもWPFでも問題ない。
 大半をDLLにして、上っ面だけNETでもいい。
0733デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 12:16:29.66ID:+QB1TWiX0
平和だからね。
0734デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 12:18:52.83ID:+QB1TWiX0
>プロに頼んだほうがいいよ

頼んだのだけどやる人がいない。
0735デフォルトの名無しさん (アウアウエー Sab2-A9BZ)
垢版 |
2017/08/27(日) 12:21:18.06ID:8n2Hj3z6a
>>720
VS2008まではVB6⇒VB2008へのコンバーターがついてたので、
VS2008かVB2008 Expressをなんとか手に入れて、とりあえずVB2008に変換して
みたらどうかなと。

まあ変換精度は高くないので手直ししないとまず正常に動かないし、
返還後のコードはMicrosoft.VisualBasic名前空間とかVBランタイム関数とか
使いまくりなので、それをさらにC#で書き直すのはかなり大変だと思うけど
0736デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 12:31:29.70ID:+QB1TWiX0
>>720
それは調べてやってみたが、1時間かかっても変換できなかったよ。
一時間たってキャンセルしたら1kのLogファイルが残ってた。
多分簡単なものなら変換できるだろうと淡い期待はもっている。リファクタリングして疎結合にすれば
3つに分解できそう。
 IOコントロール
 DBアクセス
 画面
IOが厄介だなーとは思う。多分この部分がよくわからないのでプロは逃げ出す。
0737デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 12:35:37.88ID:+QB1TWiX0
>使いまくりなので、それをさらにC#で書き直すのはかなり大変だと思うけど

混在してつかえるし、VBのクラスはそのまま呼び出せるので不都合のある部分だけラッパーすればいいだけでは?
それならVBで書けよって話になるかもしれないが、追加部分だけでもC#にしたい。
0741デフォルトの名無しさん (ワンミングク MM5a-fQI7)
垢版 |
2017/08/27(日) 13:29:37.85ID:Ss/d45M6M
>>740
一般論的に言ってリプレースは最後の手段だ
少なくとも数ヶ月はリファクタリング、リアーキティングなど試せることは試した上で
それでも手に負えないと判断してからリプレースに着手する
いきなりリプレースはリスクがデカすぎる
しかしながら経験上VB6の移植は結局リプレースになることが多いんだわ
0742デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 13:33:01.79ID:+QB1TWiX0
>>738
確かにそういうばあいもある。モジュールが多いのが問題だけれどもクラスを使っているから、そんなに下手なプログラムではないね。
VB6でクラスを使っているとまあまともだね。
0744(スプッッ Sdca-Vrzw)
垢版 |
2017/08/27(日) 14:21:50.71ID:0sFxQlMgd
>>726
工業デザインの人に、アーティストと言うと鉄拳飛んできたイメージだが、今のデザイナーはアーティストはなのかな。
俺もデザイン系の単位も資格も持ってるけど、アートと思った事は無いなぁ。
0746デフォルトの名無しさん (ワッチョイ 0a11-xpGE)
垢版 |
2017/08/27(日) 16:30:03.45ID:QZuIwK0r0
VB6のコードを解読しないといけないアーティストw

システムの内側からじゃなく外側から整理して
ユースケース単位や機能単位でコードリーディングしていくのが効率的
0747デフォルトの名無しさん (アウアウエー Sab2-A9BZ)
垢版 |
2017/08/27(日) 16:47:16.97ID:UU3MXRkga
プログラム本体やシステム全体の仕様が分かってるならゼロから書き直した方が
結局早いと思うけどね。

そもそも今更C#でに移行するのは、将来手を入れる可能性があるからじゃないの?
だとしたら長期的なメリットデメリットを考えてもそうした方がいいよね。

「動いてるプログラムを触ってはいけない」ってのは個人的にはダメな人の台詞だと思うね。
それ、自分のコードを理解する能力が不十分だって語るに落ちてないか?
0754デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 19:20:19.44ID:+QB1TWiX0
技術的アプローチに対してアーティスト的アプローチもある。そもそも専門家が遣らないという
のは技術的に興味がない。もしくは打算的技術者なら経済的に見てもメリットがないということだ。
つまり儲からない。そういう結論がでている。

 しかしアーティストの見解は違う。アーティストにとっては技術とか打算とかの優先順位は
かなり低い。すべての仕事はどう料理するかがアーティストのアーティストたる能力の発揮し
どころだから、技術屋から見るとかなりリスキーであっても敢てやってみる。
0755デフォルトの名無しさん (ワッチョイ dd6f-M74o)
垢版 |
2017/08/27(日) 19:24:45.57ID:+QB1TWiX0
>>752
表面的な仕様というかパラメータの設定とか動作などの取り扱い方法は客先で大体はわかる。
しかしメカの細かい動作なんかの部分は一切分からない。動作検証は客先でやってくれる。
結果が正しいかどうかは客先でわかる。
0760デフォルトの名無しさん (アウーイモ MM91-1Eq8)
垢版 |
2017/08/28(月) 21:24:49.09ID:jkZMoX4aM
>>720
昔、なんかのツール使ってVB6を.NETにしたよ。
急には上がらないから2005にして2008にして2010だったかな。
段階的に変えていく。
それぞれの.NETstudio使う。
前のバージョンを上げられるよ。
2005から2010とかは確かできない。

で、最後にC♯にすればよくね?
0766デフォルトの名無しさん (ワッチョイ 86a2-2x4P)
垢版 |
2017/08/29(火) 07:50:29.80ID:se0bVMb80
前VB6を.NETに移行する案件あったなスルーしてよかった新人突っ込んだらしいし
配列要素の1始まりとか鬼門過ぎるVB6触ったこと無いが
0768デフォルトの名無しさん (ブーイモ MM2e-Fy2N)
垢版 |
2017/08/29(火) 08:13:07.45ID:KBcajP1UM
VB.NETの配列はX(N)で宣言するとX(0)〜X(N)まで確保される仕様だから、
VB6からの移植の場合はX(0)を無視すればインデックスはだいたいそのままで動くぞ
汚いといえば汚いけどこの仕様を決めた奴は有能だと思う
0778デフォルトの名無しさん (アウアウカー Sa85-PSHs)
垢版 |
2017/08/29(火) 20:53:58.30ID:Vnq3Ax6Ua
配列の要素数があれ?ってなる
0779デフォルトの名無しさん (ワッチョイ caea-dMKE)
垢版 |
2017/08/29(火) 21:20:52.33ID:BqQa7G9t0
>>768
ソースが出てこないが.Net化の際にゼロで統一するようにしたら
ベータ版の段階で世界中からクレームのフィードバックが沢山あったので
その折衷仕様になったはず。
0780デフォルトの名無しさん (ワッチョイ caea-dMKE)
垢版 |
2017/08/29(火) 21:23:35.54ID:BqQa7G9t0
ゼロで統一じゃないや。C系に揃えるってことでした。
ExcelのCellオブジェクトと関連させる場合は
1スタートto要素数=最終行or列で合う
0783デフォルトの名無しさん (ワッチョイ fe6d-EUPY)
垢版 |
2017/08/29(火) 23:45:49.74ID:Z8GIMLiK0
抽象クラスのoverride で、型を変えるような事はできるでしょうか?

以下のようなコードが書けるかなと思ったのですが
戻り値はあくまでList<object>でないとダメみたいなので
書く方法があればお教えください

public class hoge { }
public class fuga { }

public abstract class Base
{
public abstract List<object> GetData();
}

public class SubOne : Base
{
public override List<hoge> GetData()
{
return null;
}
}

public class SubTwo : Base
{
public override List<fuga> GetData()
{
return null;
}
}
0794デフォルトの名無しさん (ワッチョイ cd03-2Mp8)
垢版 |
2017/08/30(水) 13:29:51.66ID:flwVYOal0
一見>>785でよさそうに思えるが
よくよく考えると使い道が分からん
Base<hoge> と Base<piyo> は違う型になるので
それらを継承したクラス同士も違うクラスから派生しているっつーことで
統一的には扱えなくなる
差分プログラミングがしたいならそれでよいが
なら、Baseクラスのabstractの意味は何だ?
0795デフォルトの名無しさん (バッミングク MM9f-O9jT)
垢版 |
2017/08/31(木) 07:11:58.47ID:uXMS1+GuM
783ですが、抽象化したテーブルクラスを作って、テーブル単位で選択結果を返す具象クラスを作りたかったのですが、Dapperを使うのでメソッドの戻り値がList<T>となり戻り値の型が具象クラス毎に違っています

こういう例が無さそうということはアンチパターンやってるでしょうか
0797デフォルトの名無しさん (ワントンキン MM9f-+LVy)
垢版 |
2017/08/31(木) 07:53:46.13ID:5L4gV5sHM
>>795
interface IDao<TEntity, TId> {
TEntity ReadOne(TId id);
IEnumerable<TEntity> ReadPage(int pageSize, int pageIndex);
void Create(TEntity e);
void Update(TEntity e);
void Delete(TEntity e);
}
class FooDao : IDao<Foo> { ... }

これじゃいかんのか?
0798デフォルトの名無しさん (バットンキン MM67-O9jT)
垢版 |
2017/08/31(木) 18:48:22.38ID:RNa0QExKM
>>797
テーブルのみを扱うので同様の属性という意味で抽象クラス使ったのですが、インターフェイスで選択したデータを返す機能として定義した方が良いでしょうか

抽象とインターフェイスの使い分けに今ひとつ自信がなくて
0799デフォルトの名無しさん (ブーイモ MMff-9zQU)
垢版 |
2017/08/31(木) 19:00:57.90ID:knvUk5zeM
>>798
使い分ける必要はない
is Aだのcan Aだの言ってたのは昔の話で、今時はどうしても実装を継承する必要がある場合以外は基本的にインターフェースを使う
もっというと、実装継承のために抽象クラスを使う場合はインターフェース継承とは本来区別して考えるべきで、
インターフェース←抽象クラス←具象クラス
という継承関係にするのが理想
抽象クラスはあくまで実装の共通化のためのツールに過ぎない
0803デフォルトの名無しさん (ワッチョイ cfa2-X0kF)
垢版 |
2017/09/01(金) 05:13:10.52ID:JBM8M4Dg0
MariaDBってデフォで接続できたりする?
0805デフォルトの名無しさん (ワッチョイ cfaa-gHR8)
垢版 |
2017/09/01(金) 14:07:02.06ID:RTadbuNn0
インターフェースは、has-a、部品化。車とハンドル。
抽象クラスは、is-a、継承。車と消防車

継承は、クラスに親子関係がある。
非常に似ているもの同士

部品化は、全く異なるもの同士

DI は、XMLなどの設定ファイルから、クラスを自動的に作る、ジェネレーター
0808デフォルトの名無しさん (ワッチョイ cfaa-gHR8)
垢版 |
2017/09/01(金) 15:27:41.14ID:RTadbuNn0
スッキリわかる Java入門 第2版、2014

Javaの人は皆、この本で、オブジェクト指向を学ぶ。
というか、日本では、この本しか無い

だから皆、C#をやる前に、Javaから勉強する

オブジェクト指向の最初のクイズが、is-a, has-a の例題
■ このスレッドは過去ログ倉庫に格納されています