こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ベースのクラスの型を定義して、 それをもとに派生?

C# でクラスを作成する場合、


private int mintCODE = 0;(1)
public int intCODE { get { return mintCODE; } set { mintCODE = value; } }(2)
public string sqlFILENAME = "Master";(3)
public string sqlCODE = "DB_CODE";(4)

private SqlConnection _connector = new SqlConnection();(5)
public DB_Master SELECT(SqlDataReader reader)(6)
{
DB_Master m = new DB_Master();
m.intCODE = DBReader(m.sqlCODE);
]
return m;


のようにクラス内の要素をひとつひとつ定義していきます。

getやset、そのほかDBのテーブル名もクラスごとに定義する必要がありますが、
クラス数が多ければ、同じような作業を繰り返す必要がでてきます。

このコーディングをコンパクトにできないものなのでしょうか?

ベースのクラスの型を定義して、
それをもとに派生したクラスはパラメータを入力するだけで、
(1)(2)(3)(4)(5)(6)
のようなメソッドやプロパティが利用できるような。。。

そのようなことは可能でしょうか?

もしサンプルなどがあれば教えていただきたいのですが。

投稿日時 - 2011-02-22 09:56:00

QNo.6541538

困ってます

質問者が選んだベストアンサー

C# 3.0以降の機能が使えるVisual Studio 2008あるいは2010をお持ちの場合、LINQ to SQLやO/Rマッピング(Object / Relational Mapping)といった機能の利用をお勧めします。SQL文の発行が言語仕様レベルでサポートされており、またVisual StudioがDB仕様からクラスを自動生成してくれますので、強力なIntelliSenseの恩恵を受けることができます。

下記サイトの前編でLINQの説明、後編でO/Rデザイナの簡単な使い方が紹介されてます。

http://www.atmarkit.co.jp/fdotnet/special/cslinq01/cslinq01_01.html

ちなみにC# 3.0以降は自動プロパティという構文もサポートされており、単純な get/set であれば、フィールドの記述を省略して、より簡潔に書けるようになっています。

投稿日時 - 2011-02-23 01:12:04

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

ファクトリメソッドパターンですかね。
普通に引数で渡しても良さそうなものですが…。

C#は最近触れてないので忘れてしまいましたけども、確かハッシュ形式でアクセス出来る方法があったはずです。
プロパティを使わずにそちらを使われては如何かと。

投稿日時 - 2011-02-22 12:57:11

ANo.2

1:1対応で全部クラスを作ればそりゃ面倒でしょう。

違うのがパラメータの「値」だけならそもそもクラスを使い分ける必要性が全く感じられません。
挙動が違ったりパラメータ型が違うという場合は、ジェネリクスを調べると幸せかもしれません。

なお、(1)と(2)はC#3.0からだったか、
public int intCODE { get; set; }
と書いておけばこれに相当するコードが展開されます。

投稿日時 - 2011-02-22 11:51:11

何がやりたいのかイマイチわからないのですが、データベースをC#で扱うならDataSet でしょうか?

データセットデザイナーとサーバーエクスプローラというのはご利用された事ありますか?どちらもVisualStudio に入ってます(要エディション確認)

これを使うとまぁビジュアルに全部やれると思うんですけどねぇ。私はC#でデータベースを扱うプログラムで、上記のようなコードを一度も書いた事がないし(つまりデータセットデザイナを使う為)、テーブルのカラムの型に気を遣う必要も無いので・・・。

もしご存じないようなら、一度その手の本を読んで手順通りやってみてください。すごーーく便利ですから。

#勘違いした回答ならごめん

投稿日時 - 2011-02-22 10:53:59