Class を跨いで共通で使える変数を作成したい
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/11/30 16:38:44
> login-id をlogin list でも使いたい
マイナス記号を含むメンバー名は定義できません。
大文字小文字を混ぜた PascalCase 表記で
> クラスを跨いで共通の変数を作成したいです。
それぞれのクラスインスタンスが、単一生成なのか複数個生成されるものなのか、
また、各クラスのインスタンスをどこで管理しているかによっても、
また話が変わってくるわけですが、おおよそ、下記のような手法が思いつきます。
案1) シングルトン クラスを用意してアクセスするようにする
案2) クラスのインスタンス メンバーではなく、クラスの共有(Shared)メンバーを用意する
案3) クラス(Class)の代わりにモジュール(Module)を使ってやり取りする
たとえば 案2 の例。
Login クラスを下記のような実装にしてみた場合…
画面1から「Login.Id = "ケンケン"」と設定して、
それを list クラス内で利用したり、あるいは
画面2で「Label1.Text = Login.Id」のようにして
取り出したりすることができます。
ただしこの場合、ログインID をどこからでも自由に改竄できる点に注意が必要です。
処理内容によっては、認証情報を独自あるいは既存の IPrincipal 実装に保持して、
My.User オブジェクトに保持させるという選択肢もあります。
この時、保存先とした My.User はプロジェクト内のどこからでも利用可能なプロパティであり、
別画面などで
Label1.Text = My.User.Name 'ケンケン
If My.User.IsInRole("管理者") Then 'False
ElseIf My.User.IsInRole("質問者") Then 'True
のようにして利用できます。
マイナス記号を含むメンバー名は定義できません。
大文字小文字を混ぜた PascalCase 表記で
Public LoginId As String
のようにするか、あるいはアンダーバーを用いた SNAKE_CASE 表記で Public LOGIN_ID As String
のようにすることで代用してみてください。> クラスを跨いで共通の変数を作成したいです。
それぞれのクラスインスタンスが、単一生成なのか複数個生成されるものなのか、
また、各クラスのインスタンスをどこで管理しているかによっても、
また話が変わってくるわけですが、おおよそ、下記のような手法が思いつきます。
案1) シングルトン クラスを用意してアクセスするようにする
案2) クラスのインスタンス メンバーではなく、クラスの共有(Shared)メンバーを用意する
案3) クラス(Class)の代わりにモジュール(Module)を使ってやり取りする
たとえば 案2 の例。
Login クラスを下記のような実装にしてみた場合…
Public Class Login
Public Shared Property Id As String
End Class
画面1から「Login.Id = "ケンケン"」と設定して、
それを list クラス内で利用したり、あるいは
画面2で「Label1.Text = Login.Id」のようにして
取り出したりすることができます。
ただしこの場合、ログインID をどこからでも自由に改竄できる点に注意が必要です。
処理内容によっては、認証情報を独自あるいは既存の IPrincipal 実装に保持して、
My.User オブジェクトに保持させるという選択肢もあります。
My.User.CurrentPrincipal = New System.Security.Principal.GenericPrincipal(
New System.Security.Principal.GenericIdentity("ケンケン", "Example"),
New String() {"投稿者", "質問者"})
この時、保存先とした My.User はプロジェクト内のどこからでも利用可能なプロパティであり、
別画面などで
Label1.Text = My.User.Name 'ケンケン
If My.User.IsInRole("管理者") Then 'False
ElseIf My.User.IsInRole("質問者") Then 'True
のようにして利用できます。
投稿者 ケンケン  (社会人)
投稿日時
2021/11/30 17:07:30
ご丁寧な指導ありがとうございます。
とても参考になりました。
とても参考になりました。
login-id をlogin list でも使いたい
Public Class Login
login-id = xxxx 'set
End Class
Public Class list
'参照
login-id → login Class のlogin-id を此処でも使いたい
End Class
クラスを跨いで共通の変数を作成したいです。