- - PR -
TableAdapterのコード
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-05 15:54
C#2005を使用しています。
データセット(DataSet1.xld)を作成してTableAdapter(TESTTableAdapter)を 配置して、そのTableAdapterに対してDataSet1.csの中でpartial classを 作成しようと思ったのですが、
としたところビルドエラーになってしまいました。 「型 '**.**.DataSet1TableAdapters.TESTTableAdapter'は'TESTTableAdapter'と呼ばれるメンバを同じパラメータの型で既に定義しています。」とメッセージが出ます。 これは何が原因なのでしょうか? 何かのプロパティの設定が足りないのかとも思い、xsdのデザイナ画面を見てみたのですがそれらしいプロパティもなさそうですし。。。 どこか見落としている設定があれば、ご指摘願います。 | ||||||||
|
投稿日時: 2009-03-05 19:31
エラーが起きている箇所はコンストラクタのところではないでしょうか。 であれば、もう一方の Partial クラスで 「すでにデフォルト コンストラクタが存在している」 のではないでしょうか。 DataSet デザイナが自動生成した側のソースを確認してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2009-03-06 14:21
じゃんぬねっとさん、お返事ありがとうございます。
つまり、「既にコンストラクタがあるから重複だ」と言われているわけですね。 教えていただいたとおり、DataSet1.Designer.csに記述があるのをみつけました。 この場合、
のbase()でデフォルトコンストラクタを呼び出してから処理に入ってくれると 思っていたのですが、これだけではダメということですか? (デフォルトコンストラクタをOverrideするイメージで書いていました。。。) | ||||||||
|
投稿日時: 2009-03-06 18:05
まず 「オーバーライド」 をイメージしているとのことですが、むしろこれは 「オーバーロード」 そのものです。 Partial クラスで分けられたソースに継承のような上下関係はありません。 Partial クラスというのは言葉どおり 「ひとつのものが不完全な状態で別れたもの」 だとご理解ください。 つまり今回の例ですとコンストラクタを 2 つ定義していることになります (引数のないデフォルト コンストラクタが 2 つ定義されている)。 オーバーロードは呼び出す時において (戻り値を除く) シグネチャに曖昧さがあると解決できません。 これはコンストラクタではなくメソッドでも同様です。 試しに同じ名前、同じ引数の数、同じ引数の型を持つメソッドを 2 つ以上定義すると、同じビルド エラーになることが確認できるでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2009-03-09 13:33
ようやく理解できました。
このご説明で納得です。 Partialクラスの理解を誤っていたんですね。 ご指摘どおり、継承と混同していました。 定義を分けることで解決しました。どうもありがとうございました。 |
1