none
VB.NETで派生クラスが基本クラスのメンバを非表示にできるようにする方 RRS feed

  • 質問

  •  

    VB.NETで派生クラスが基本クラスのメンバを非表示にできるようにする方法を教えてください。

     

    具体的には

    従来の ASP と ASP.NET でセッション状態を共有する方法

    http://msdn.microsoft.com/ja-jp/library/cc465499.aspx

     

     

    ASP.NET の実装

    ASP.NET では、すべての Web ページが System.Web.UI.Page クラスから派生されています。 Page クラスは、セッション データの HttpSession オブジェクトのインスタンスを集約したものです。今回の例では、System.Web.UI.Page から Page クラスと同じ機能をすべて提供するカスタム Page クラス SessionPage を派生します。派生したページで唯一異なる点は、既定の HttpSession がカスタム セッション オブジェクトにオーバーライドされている点です。 (インスタンス変数に new 修飾子を使用すると、C# は派生クラスが基本クラスのメンバを非表示にできるようにします。)

     

       public class SessionPage : System.Web.UI.Page
       {
          ...
          public new mySession Session = null;
          ...
       }
    

     

    (以下略)

     

    このデモプログラムをC#からVBへ書き換えているのですが

    public new mySession Session = null;の部分を

    Public Session As New mySessionとするとコンパイルエラーとなります。

    エラーは

    「変数'Session'はproperty 'Session'とベースclass 'Page'で競合しています。

    'shodows'として宣言されなければなりません。」

    です。

     

    VBでshodwosとして宣言すると当然エラーは消えますがデモの最大の目的であるセッションの共有で

    目的を果たせません。

     

    派生クラスが基本クラスのメンバを非表示できるようのはC#のみなのでしょうか?

    VBで実現できる方法を教えていただけないでしょうか。

    何卒よろしくお願い致します。

     

     

     

     

     

    2008年11月21日 6:48

回答

  •  FoolSolity さんからの引用

    このデモプログラムをC#からVBへ書き換えているのですが

    public new mySession Session = null;の部分を

    Public Session As New mySessionとするとコンパイルエラーとなります。

     

    そこは、

     

    Code Snippet

    Public Shadows Session As mySession = Nothing

     

     

    になるのでは? C# を NET.VB に変換するなら以下のサイトを使っては
    いかがでしょうか?

     

    http://www.developerfusion.com/tools/convert/csharp-to-vb/

     

    参照されていた MSDN サイトの C# のコードは、ほぼ間違いなく VB.NET
    のコードに変換できるようです。試してみましたが、とりあえずコンパ
    イルできる程度には正しいことは確認できました。

    2008年11月22日 7:32
  • 変換するツールがあるのですね^^);

    自力でこつこつと変換していました。

     

    ツールを使いまして変換したところうまく動作できるようになりました。

    原因はmySessionクラスのプロパティを

    Public Property mySession(ByVal name As String) As String

    としていたためaspxのPage_Load内のsessionを参照できない状況になっていました。

     

    ツールを使いますと

    Default Public Property Item(ByVal name As String) As String

    と変換されてました。

     

    皆様どうもありがとうございました。

    2008年11月25日 1:47

すべての返信

  • 上のほうに、どうやって実装するかが書かれています。規定で定義されている Session プロパティを隠して、SQL Server に保存するような Session プロパティを定義すると。

    で、どこまでできているのでしょう?ASP.NET と ASP でセッション情報が共有できない。それは最終目的ですが、そこに行くまでにいくつかの通過点があります。どこの通過点まで、通過できているのでしょう?

     

    2008年11月21日 10:15
  •  FoolSolity さんからの引用

    このデモプログラムをC#からVBへ書き換えているのですが

    public new mySession Session = null;の部分を

    Public Session As New mySessionとするとコンパイルエラーとなります。

     

    そこは、

     

    Code Snippet

    Public Shadows Session As mySession = Nothing

     

     

    になるのでは? C# を NET.VB に変換するなら以下のサイトを使っては
    いかがでしょうか?

     

    http://www.developerfusion.com/tools/convert/csharp-to-vb/

     

    参照されていた MSDN サイトの C# のコードは、ほぼ間違いなく VB.NET
    のコードに変換できるようです。試してみましたが、とりあえずコンパ
    イルできる程度には正しいことは確認できました。

    2008年11月22日 7:32
  • コンパイルできるかどうかだけでなく、SessionPage クラス以外のクラス、
    インターフェイスも C# から NET.VB 変換して実装し、動くかどうか試し
    てみました。暇でしたので。

     

    結果、SessionPersistence クラスの中の ISessionPersistence メンバー
    (LoadSession, SaveSession, GenerateKey, SessionID) の実装で、

     

    Implements ISessionPersistence.Xxxxxxxxxxx

     

    がなかった点以外は、上のレスで紹介した Website の自動変換で OK で
    した。そこまで自動変換できちんとできるとは思ってなかったので、ち
    ょっとびっくりです。

     

    ただし、

     

    LoadCmd.Parameters.Add("@ID", new Guid(key));

     

     

    LoadCmd.Parameters.AddWithValue("@ID", New Guid(key))

     

    に変換したりはしてくれませんので、その部分に警告は出ますが。(笑)

    2008年11月24日 2:36
  • 変換するツールがあるのですね^^);

    自力でこつこつと変換していました。

     

    ツールを使いまして変換したところうまく動作できるようになりました。

    原因はmySessionクラスのプロパティを

    Public Property mySession(ByVal name As String) As String

    としていたためaspxのPage_Load内のsessionを参照できない状況になっていました。

     

    ツールを使いますと

    Default Public Property Item(ByVal name As String) As String

    と変換されてました。

     

    皆様どうもありがとうございました。

    2008年11月25日 1:47