- にゃご
- 会議室デビュー日: 2006/06/17
- 投稿数: 10
|
投稿日時: 2006-06-19 12:23
引用: |
|
たつ64さんの書き込み (2006-06-19 11:47) より:
回答ではありませんが…。
これが最初の投稿に記載されていれば話の流れが変わっていたでしょうね。
# 因みにグローバル変数ってのも違う気がする…。
|
すみません!説明不足でした。気をつけます(__;
|
- にゃご
- 会議室デビュー日: 2006/06/17
- 投稿数: 10
|
投稿日時: 2006-06-19 12:34
引用: |
|
じゃんぬねっとさんの書き込み (2006-06-19 12:16) より:
迷っている理由は、共有メンバでないコンストラクタで、共有メンバの値を設定しているからですよね?
:
:
...もともとは、「他のプロジェクトから値の変更を許したくない」 という理由があって悩んでいたのだと思います。
|
↑おっしゃる通りです!お作法的にも、実用的(?)的にも、こんなことしていいのかしら?、と。
引用: |
|
値を設定するのはコンストラクタではなく、共有メソッドにすれば良いのではないでしょうか?
|
共有メソッド・・・
引用: |
|
共有メンバではなく、インスタンス メンバにしておいて、
'このクラス (Test) のインスタンス' を持つ変数を Shared に持てば良いのではないでしょうか?
いわゆる、グローバル的な使い方ですが...
|
...???
※じゃんぬねっと様ありがとうございます。アドバイスを参考にもいちど練りなしてみます・・・(TT;
[ メッセージ編集済み 編集者: にゃご 編集日時 2006-06-19 12:40 ]
|
- Kazuki
- ぬし
- 会議室デビュー日: 2004/10/13
- 投稿数: 298
|
投稿日時: 2006-06-19 12:41
シングルトンパターンって言葉でググってみるとか
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-06-19 14:08
引用: |
|
にゃごさんの書き込み (2006-06-19 12:34) より:
共有メソッド・・・
|
VB で言えば、Shared 修飾子がついているメソッドです。
インスタンス化しなくても、アクセスできるメソッドですね。
私も、'どこがわからないのか' が、わからないです。
おそらく、言葉がわからないだけなのだと思いますが、
言葉がわからない場合は、その言葉そのものを検索すると良いです。
コード: |
|
Public NotInheritable Class Test
#Region " ID プロパティ "
Private _Id As Integer
Public ReadOnly Property Id() As Integer
Get
Return Me._Id
End Get
End Property
#End Region
#Region " Name プロパティ "
Private _Name As Integer
Public ReadOnly Property Name() As String
Get
Return Me._Name
End Get
End Property
#End Region
#Region " コンストラクタ (+1) "
Private Sub New()
'/ 隠蔽
End Sub
Public Sub New(ByVal id As Integer, ByVal name As String)
Me._Id = id
Me._Name = name
End Sub
#End Region
End Class
|
このクラスのインスタンスを持つ変数を、
コード: |
|
Public Shared Singleton As Test
|
このように、共有 (Shared) メンバとして 1 つだけ持つことにします。
この変数の初期化は、
コード: |
|
Singleton = New Test(5, "まゆりん")
|
として、コンストラクタで初期値を設定できます。
あとは、この Singleton をどこに配置するか、ですね。
これについては、ヒントも出ていますので、調べてみてください。(*_ _)
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- にゃご
- 会議室デビュー日: 2006/06/17
- 投稿数: 10
|
投稿日時: 2006-06-20 20:39
じゃんぬねっと様、詳しいコードをありがとうございます。_(_._)_
教えていただいたコードをもとに(というか、ほとんど丸写し・・・)下記のように修正してみました。
クラスライブラリ:HOGE
コード: |
|
Public NotInheritable Class Test
Private m_id As Long
Private m_name As String
Private Sub New()
'/隠蔽
End Sub
Public Sub New(ByVal userId As Long, ByVal userName As String)
m_id = userId
m_name = userName
End Sub
Public ReadOnly Property Id() As Long
Get
Return Me.m_id
End Get
End Property
Public ReadOnly Property UserName() As String
Get
Return Me.m_name
End Get
End Property
End Class
Public Class SingletonTest
Public Shared Singleton As Test
End Class
|
値を設定するプロジェクト
コード: |
|
Hoge.SingletonTest.Singleton = New Hoge.Test(userId, userName)
|
参照している別のプロジェクト
コード: |
|
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LabelId.Text = Hoge.SingletonTest.Singleton.Id.ToString
LabekName.Text = Hoge.SingletonTest.Singleton.UserName
End Sub
|
NETやたまたま購入していたデザインパターンの参考書などでも”シングルトン”を調べてみたのですが、いっていることはなんとなくわかるのですが、実際書くとなるとこれでいいのかどうか・・・(怪しい・・・)
ここまで教えていただいているのに、理解がわるくてすみません!!><
※以前からちょっと気になっていた『デザインパターン』。自分のやりたかったことが、まさかそこに行き着くとは・・・。思ってもいなかったので、ちょっとびっくりしていたりして(;^^
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-06-20 20:56
引用: |
|
にゃごさんの書き込み (2006-06-20 20:39) より:
NETやたまたま購入していたデザインパターンの参考書などでも”シングルトン”を調べてみたのですが、いっていることはなんとなくわかるのですが、実際書くとなるとこれでいいのかどうか・・・(怪しい・・・)
ここまで教えていただいているのに、理解がわるくてすみません!!><
※以前からちょっと気になっていた『デザインパターン』。自分のやりたかったことが、まさかそこに行き着くとは・・・。思ってもいなかったので、ちょっとびっくりしていたりして(;^^
|
足がかりとしては、こういうサイトがオススメです。(内輪の URL ですがw)
Singleton (シングルトン) パターン
まず、ReadOnly にしておくこと、ですね。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- にゃご
- 会議室デビュー日: 2006/06/17
- 投稿数: 10
|
投稿日時: 2006-06-21 17:12
ありがとうございました。
今回はこれでいきます!
※デザインパターンも勉強します。・・・いつかわかるようになるといいなぁ(^^;
|