トップ回答者
VB.NETで派生クラスが基本クラスのメンバを非表示にできるようにする方

質問
-
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で実現できる方法を教えていただけないでしょうか。
何卒よろしくお願い致します。
回答
-
FoolSolity さんからの引用 このデモプログラムをC#からVBへ書き換えているのですが
public new mySession Session = null;の部分を
Public Session As New mySessionとするとコンパイルエラーとなります。
そこは、
Code SnippetPublic Shadows Session As mySession = Nothing
になるのでは? C# を NET.VB に変換するなら以下のサイトを使っては
いかがでしょうか?http://www.developerfusion.com/tools/convert/csharp-to-vb/
参照されていた MSDN サイトの C# のコードは、ほぼ間違いなく VB.NET
のコードに変換できるようです。試してみましたが、とりあえずコンパ
イルできる程度には正しいことは確認できました。 -
変換するツールがあるのですね^^);
自力でこつこつと変換していました。
ツールを使いまして変換したところうまく動作できるようになりました。
原因はmySessionクラスのプロパティを
Public Property mySession(ByVal name As String) As String
としていたためaspxのPage_Load内のsessionを参照できない状況になっていました。
ツールを使いますと
Default Public Property Item(ByVal name As String) As String
と変換されてました。
皆様どうもありがとうございました。
すべての返信
-
FoolSolity さんからの引用 このデモプログラムをC#からVBへ書き換えているのですが
public new mySession Session = null;の部分を
Public Session As New mySessionとするとコンパイルエラーとなります。
そこは、
Code SnippetPublic Shadows Session As mySession = Nothing
になるのでは? C# を NET.VB に変換するなら以下のサイトを使っては
いかがでしょうか?http://www.developerfusion.com/tools/convert/csharp-to-vb/
参照されていた MSDN サイトの C# のコードは、ほぼ間違いなく VB.NET
のコードに変換できるようです。試してみましたが、とりあえずコンパ
イルできる程度には正しいことは確認できました。 -
コンパイルできるかどうかだけでなく、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))
に変換したりはしてくれませんので、その部分に警告は出ますが。(笑)
-
変換するツールがあるのですね^^);
自力でこつこつと変換していました。
ツールを使いまして変換したところうまく動作できるようになりました。
原因はmySessionクラスのプロパティを
Public Property mySession(ByVal name As String) As String
としていたためaspxのPage_Load内のsessionを参照できない状況になっていました。
ツールを使いますと
Default Public Property Item(ByVal name As String) As String
と変換されてました。
皆様どうもありがとうございました。