- PR -

コンストラクタとShared

投稿者投稿内容
にゃご
会議室デビュー日: 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
ありがとうございました。
今回はこれでいきます!

※デザインパターンも勉強します。・・・いつかわかるようになるといいなぁ(^^;

スキルアップ/キャリアアップ(JOB@IT)