- PR -

TableAdapterのコード

1
投稿者投稿内容
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 2009-03-05 15:54
C#2005を使用しています。

データセット(DataSet1.xld)を作成してTableAdapter(TESTTableAdapter)を
配置して、そのTableAdapterに対してDataSet1.csの中でpartial classを
作成しようと思ったのですが、

コード:
namespace **.**.DataSet1TableAdapters
{
    partial class TESTTableAdapter
    {
        public  TESTTableAdapter()
            : base()
        {
            this.ClearBeforeFill = true;

            foreach (DbCommand cmd in this.CommandCollection)
            {
                cmd.CommandTimeout = Properties.Settings.Default.DataAdapterTimeout;
            }
        }
    }
}



としたところビルドエラーになってしまいました。
「型 '**.**.DataSet1TableAdapters.TESTTableAdapter'は'TESTTableAdapter'と呼ばれるメンバを同じパラメータの型で既に定義しています。」とメッセージが出ます。
これは何が原因なのでしょうか?
何かのプロパティの設定が足りないのかとも思い、xsdのデザイナ画面を見てみたのですがそれらしいプロパティもなさそうですし。。。

どこか見落としている設定があれば、ご指摘願います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-03-05 19:31
引用:

さくらさんの書き込み (2009-03-05 15:54) より:

「型 '**.**.DataSet1TableAdapters.TESTTableAdapter'は'TESTTableAdapter'と呼ばれるメンバを同じパラメータの型で既に定義しています。」とメッセージが出ます。


エラーが起きている箇所はコンストラクタのところではないでしょうか。 であれば、もう一方の Partial クラスで 「すでにデフォルト コンストラクタが存在している」 のではないでしょうか。 DataSet デザイナが自動生成した側のソースを確認してみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 2009-03-06 14:21
じゃんぬねっとさん、お返事ありがとうございます。

引用:

エラーが起きている箇所はコンストラクタのところではないでしょうか。 であれば、もう一方の Partial クラスで 「すでにデフォルト コンストラクタが存在している」 のではないでしょうか。 DataSet デザイナが自動生成した側のソースを確認してみてください。



つまり、「既にコンストラクタがあるから重複だ」と言われているわけですね。
教えていただいたとおり、DataSet1.Designer.csに記述があるのをみつけました。
この場合、
コード:
        public  TESTTableAdapter()
            : base()


のbase()でデフォルトコンストラクタを呼び出してから処理に入ってくれると
思っていたのですが、これだけではダメということですか?
(デフォルトコンストラクタをOverrideするイメージで書いていました。。。)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-03-06 18:05
引用:

さくらさんの書き込み (2009-03-06 14:21) より:

のbase()でデフォルトコンストラクタを呼び出してから処理に入ってくれると思っていたのですが、これだけではダメということですか?
(デフォルトコンストラクタをOverrideするイメージで書いていました。。。)


まず 「オーバーライド」 をイメージしているとのことですが、むしろこれは 「オーバーロード」 そのものです。 Partial クラスで分けられたソースに継承のような上下関係はありません。

Partial クラスというのは言葉どおり 「ひとつのものが不完全な状態で別れたもの」 だとご理解ください。 つまり今回の例ですとコンストラクタを 2 つ定義していることになります (引数のないデフォルト コンストラクタが 2 つ定義されている)。

オーバーロードは呼び出す時において (戻り値を除く) シグネチャに曖昧さがあると解決できません。 これはコンストラクタではなくメソッドでも同様です。 試しに同じ名前、同じ引数の数、同じ引数の型を持つメソッドを 2 つ以上定義すると、同じビルド エラーになることが確認できるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さくら
常連さん
会議室デビュー日: 2005/09/12
投稿数: 31
投稿日時: 2009-03-09 13:33
ようやく理解できました。

引用:

じゃんぬねっとさんの書き込み (2009-03-06 18:05) より:

まず 「オーバーライド」 をイメージしているとのことですが、むしろこれは 「オーバーロード」 そのものです。 Partial クラスで分けられたソースに継承のような上下関係はありません。




このご説明で納得です。
Partialクラスの理解を誤っていたんですね。
ご指摘どおり、継承と混同していました。
定義を分けることで解決しました。どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)