2012-04-07 10 views
0

コンストラクタ内のメソッドによって生成される次のプロパティを持つクラスがあります。クラスを継承せずにクラスのプロパティにアクセスする

Public Class clsLoadTables 
    Private _ds As New DataSet 
    Public Property ds() As DataSet 
     Get 
      Return _ds 
     End Get 
     Set(ByVal value As DataSet) 
      _ds = value 
     End Set 
    End Property 

    Sub New() 

     Try 
      loadCSVTableII() 
      loadXMLFiles(pathMainTable, "MainRMDTable") 
      loadXMLFiles(pathBeneLifeExp, "pathBeneLifeExp") 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
      Throw 
     End Try 

    End Sub 

End Class 

私の問題は、このクラスを継承したくないということですが、私はds DataSetプロパティにアクセスする必要のある他のクラスを持っています。可能であれば、継承を使用しないで、プログラムで複数回データテーブルをロードしない場合は、ここで

はclsLoadTablesを継承されていない別のクラス内のプロパティにアクセスするには、私の失敗した試みです:

 Dim tableRow As DataRow = ds.Tables("MainRMDTable").Select(String.Format("age={0}", age.ToString()))(0) 

私は、多くのプログラムの中で一度だけロードする、このデータセットにアクセスする方法上の任意のアイデアクラス継承やグローバルモジュールを使用しないクラスVB.Netでのグローバルスコープの

+1

クラスの目的は何ですか?グローバルモジュール(使用したくないモジュール)とはどのような違いがありますか? –

+2

あなたは 'shared'にして[共有コンストラクタ](http://msdn.microsoft.com/en-us/library/aa711965%28v=vs.71%29.aspx)にロードすることができます。 –

+0

Pavel - あなたの権利はありません。私はよりオブジェクト指向のプログラマーになるために自分自身を強制しようとしています –

答えて

3

あなたはそれを公開財産として持っていますclsLoadTablesクラスのインスタンスへの参照がある場合。

Dim foo As New clsLoadTables 

Dim tableRow As DataRow = foo.ds.Tables("MainRMDTable").Select(String.Format("age={0}", age.ToString()))(0) 
+0

私はコンストラクタに持っているメソッドを再実行しませんか?私はそのクラスのデータをデータセットにロードするためにSub Newを使用しています。私はそれを一度呼びたいだけです。 –

+1

@ LanceCollins:1つのclsLoadTablesオブジェクトを作成し、それを一貫して使用します。毎回新しいオブジェクトを再作成する必要はなく、参照を保持するだけで済みます。本当に、理想的な方法はこれにシングルトンパターンを使用することです。 –

1

はPUBLIC変数やパブリックメソッドまたは新しいデータセット

などの新しいデータセットとして

公開_ds

または

友達_dsような友人変数でモジュールを使用します

私はあなたの質問を誤解していないことを願っています。

+0

Sandeep - コメントありがとう。それは間違いなく機能します。モジュールを使用せずに正しく実装できるかどうかを確認しようとしていましたが、モジュールを使用するのがベストプラクティスと見なされた場合は、まったく正しいです。ありがとう! –

+1

ええ、あなたがこのアプローチを使用する場合は、クラスを継承する必要はありませんが、私は公共の変数を格納するためのMODULEを作成することをお勧めします – appdroid

1

一般的に私はこのような何かのためにやっていることは、単にsharedこととあなたの財産のgetがアクセスされた第1回データをロードするために、あなたのクラスで_dsを変更されます。

関連する問題