豊田 孝

 本日は,Webサービスとクラス継承の関係を取り上げます。まずクラス継承を簡単に整理します。その後,具体的なサンプル・プログラムを通して,クラス継承の実際の様子を検討することにします。それではさっそく本論に入りましょう。

クラス継承とは何か?

 クラス継承は,簡単に説明すると,あるクラスの資産を受け継ぐ方向で別のクラスを作成する概念,あるいは,技術です。少し専門的に表現すれば,基本となるクラスを再利用しながら,目的のクラスを作成することです。

 クラス継承は,“他のクラスの資産を受け継ぐこと”を可能としていますから,たいへん便利な考え方といってよいでしょう。

 しかし,クラス継承を便利な技術として活用するためには,クリアすべき条件があります。それは,“クラス継承の概念をよく理解し,場面に応じて適切に活用すれば”,という条件です。受け継ぐ内容をよく理解せずに,便利そうだから,あるいは,先輩のソースコードがそうなっていたからといった,漠然とした理由や期待感からクラス継承を活用すると,予期せぬ問題も発生してしまいます。

クラスを継承した結果エラーが出る!

 第2回で紹介したように,Visual Studio .NETのWebサービス・ウィザードは,WebServiceというクラスから資産を継承する方向で,私たち独自のWebサービス・クラスを作成するプログラミング・モデルを提案しています。しかし,第3回以降から本連載で紹介しているWebサービス・プログラムは,クラス継承を使っていません。それではここで,これまで紹介したWebサービス・プログラムの一つにクラス継承を応用してみましょう。

 前回ダウンロードしていただいたプログラムの中に,AdvancedNo5cs.asmxとAdvancedNo5vb.asmxという名前のプログラムがあります。まだダウンロードしていない方は,ダウンロードしてください。ダウンロードしたら,次のような修正を行ってください。

(AdvancedNo5cs.asmxの修正)

(修正前)
public class SharpClass

(修正後)
public class SharpClass : WebService

(AdvancedNo5vb.asmxの修正)

(修正前)
Public Class BasicClass

(修正後)
Public Class BasicClass : Inherits WebService

図1●プログラムを修正後,Webサービスを呼び出した画面
図2●「ClassAttributeCheckArray」メソッドを選択すると,エラー画面が表示される
 コーディング的には,クラス継承はこのように簡単に記述できます。この修正作業が完了したら,どちらかのWebサービスを呼び出してください。図1[拡大表示]のような画面が表示されるはずです。ここでは,C#版を呼び出しています。

 この画面は,MyHelper Webサービス・クラスは2つのメソッドを公開していることを示しています。ここで,下側の「ClassAttributeCheckArray」メソッドを選択し,「起動」ボタンをクリックします。すると,修正前には検出されなかった,図2[拡大表示]のようなエラー画面が表示されます。

 AdvancedNo5cs.asmxとAdvancedNo5vb.asmxはクラス継承を応用する以前は,正常に動作していました。これはいったいどういうことでしょうか?

継承した資産を調べてみる

 結論を先に言うと,エラーの発生原因は,WebServiceクラスから継承した資産内容にあります。継承した資産内容が気になりますから,ここで,WebServiceクラスを継承してWebサービス・クラスを作成している場合と,そうでない場合の,クラス属性数,プロパティ数,メソッド数の3種類の情報を表示してみましょう。本日用意したAdvancedNo6cs.asmxとAdvancedNo6vb.asmxという2種類のサンプル・プログラムをこちらからダウンロードして,実行ください。

図3●WebServiceクラスを継承しないWebサービス・クラス情報の一部
図4●WebServiceクラスを継承するWebサービス・クラスの情報の一部
 WebServiceクラスを継承しないWebサービス・クラス情報は,図3[拡大表示]に一部を示すような情報を返してきます。

 結果を整理すると,次のようになります。

(クラス継承未使用時)

プロパティ数:0
クラス属性数:1
メソッド数:7

 図4[拡大表示]は,WebServiceクラスを継承するWebサービス・クラスの情報の一部を示しています。

 結果を整理してみると,次のようになります。

(クラス継承使用時)

プロパティ数:8
クラス属性数:4
メソッド数:20

 まったく同じWebサービスを呼び出していますが,返される結果と先の結果はまったく異なっています。クラス属性数,プロパティ数,メソッド数のいずれも増えています。WebServiceクラスの資産が継承されていることがはっきり分かります。次回は,WebServiceクラスから継承した具体的な資産内容を紹介し,WebServiceクラスとはそもそも何なのか,を考えます。

 前回紹介したように,WebServiceAttributeクラスとWebMethodAttributeクラスは,ASP .NETが自動生成するWeb Service Description Language(WSDL)の定義情報に直接反映されていました。WebServiceクラスから継承した資産も,Web Service Description Language(WSDL)の定義情報に反映されるのでしょうか?もし反映されないなら,WebServiceクラスを継承するということはどのような意味を持っているのでしょうか?

 本日は,Webサービスとクラス継承の関係を取り上げましたが,いかがだったでしょうか?後日お時間のあるときにサンプル・プログラムをいろいろ動かしてみてください。

 それでは次回またお会いいたしましょう。ごきげんよう!