- 七
- 大ベテラン
- 会議室デビュー日: 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
|