- PR -

【.NET2003 Windows】シングルトンクラス と 静的メソッド の違い

投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2007-07-09 19:29
いつもお世話になっております
 VB.NET2003 Windowsアプリで 教えてください

 頭が混乱してきてしまって
 どなたか、ご教授いただければと思い、書き込みさせてもらいます
 下記のコードをそれぞれ、呼びだし元とは異なるプロジェクトに作成し
 別dllを作成、Dll参照して使用する場合

コード:
コード@
NotInheritable Public Class Singleton
   Private Shared instance As New Singleton()
   Private Shared_Data As String
   
   Private Sub New()
   End Sub  
   
   Public Shared ReadOnly Property Instance() As Singleton
      Get
         Return instance
      End Get
   End Property
   
   Public Property [Shared_Data] As String
      Get
         Return Shared_Data
      End Get
      Set(ByVal in_Data As String)
         Shared_Data = in_Data
      End Set
   End Property
End Class 

コードA
NotInheritable Public Class Seiteki
   Private Shared Shared_Data As String
   
   Public Shared Property [Shared_Data] As String
      Get
         Return Shared_Data
      End Get
      Set(ByVal in_Data As String)
         Shared_Data = in_Data
      End Set
   End Property
   
End Class 




動作的には コード@もコードAも同じ動作だと思うのですが
インスタンスを Shared にする事と メソッド自体をShared にする事は
オブジェクト指向かそうでないかの違いだけなのでしょうか
厳密にいうと 何かが異なる って漠然と思っているのですが
勘違いでしょうか

ちなみに メモリ上では
コード@のインスタンス・コードAの[Shared_Data]
それぞれが開放される時期は 同じなのでしょうか
exeが終了したら 消滅しますか?

よろしくお願いいたします

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-07-10 10:02
動作的にはたいして変わらないですよね。
Singletonの方は、アプリケーション起動時ではなく初めてSingletonクラスを使用する時にインスタンスを作成するとか、必要なくなったらインスタンスをメモリから解放するとか柔軟に処理ができますけど。
引用:

七さんの書き込み (2007-07-09 19:29) より:
exeが終了したら 消滅しますか?


します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-10 10:30
引用:

七さんの書き込み (2007-07-09 19:29) より:

動作的には コード (1) もコード (2) も同じ動作だと思うのですが


このコードはコンパイル エラーになると思いますが、同じ機能になると思います。

引用:

インスタンスを Shared にする事と メソッド自体をShared にする事はオブジェクト指向かそうでないかの違いだけなのでしょうか


どのあたりの "違い" を見てオブジェクト指向かそうでないかと判断していらっしゃるのでしょうか? インスタンスを明示的に作っているとかそういう違いでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-10 10:31
引用:

一郎さんの書き込み (2007-07-10 10:02) より:

Singletonの方は、アプリケーション起動時ではなく初めてSingletonクラスを使用する時にインスタンスを作成するとか、


このあたりは静的コンストラクタ (タイプ イニシャライザ) も一緒だと思っておりました。 内部的には違うということなのでしょうか? 実は CLR 内部のあれこれは良く知らないので (ヲイ) 便乗してしまいました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2007-07-10 10:57
NAL-6295です。

引用:

じゃんぬねっとさんの書き込み (2007-07-10 10:31) より:
引用:

一郎さんの書き込み (2007-07-10 10:02) より:

Singletonの方は、アプリケーション起動時ではなく初めてSingletonクラスを使用する時にインスタンスを作成するとか、


このあたりは静的コンストラクタ (タイプ イニシャライザ) も一緒だと思っておりました。 内部的には違うということなのでしょうか? 実は CLR 内部のあれこれは良く知らないので (ヲイ) 便乗してしまいました。




これは、同じだったと記憶しています。
というか、シングルトンは静的コンストラクタを利用して実装する場合が多いですが、
はじめて利用する時に初期化されます。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-07-10 11:40
ああー、そうでした。
初めて使う時に初期化されるんでしたね。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-07-10 12:12
いや、そうとも限りません。
まあ細かい話ですけどね。
あでも、VBではどうたったかな…

全般的に保証されてるのは、少なくとも初めて使う時点では初期化されてる、てことです。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-07-10 13:23
引用:

なちゃさんの書き込み (2007-07-10 12:12) より:
いや、そうとも限りません。
まあ細かい話ですけどね。
あでも、VBではどうたったかな…

全般的に保証されてるのは、少なくとも初めて使う時点では初期化されてる、てことです。



VB固有でなんか違うのでしたっけ?

ILレベルではbeforefieldinitが付いているかどうかで異なりますね。
といいつつ、自分の記憶だけだと不安なので、ちょっと検索。

「静的コンストラクタ」の記事を書いている方がいらっしゃいました。http://csharper.blog57.fc2.com/blog-category-3.html

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