とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

2008年8月10日 #

「My を拡張するならここを読むべし♪」を改めて自分で読んでみた。その1。

とりこらぼ。:というわけで、My を拡張するならここを読むべし♪

の元ネタ↓

MSDN : Visual Basic における My 名前空間の拡張


夏休みの読書感想文のネタに読書していましたが、1点忘れないようにメモしときます。


何はともあれ、Myを拡張してみます。拡張はMy.Algorithmとかで、こないだのへっぼこソートをMy名前空間で使えるようにしましょう♪

まずは拡張内容を含むクラスをご用意。MyAlgorithm クラスとしましょう。

Public Class MyAlgorithm

    Public Sub MogoMogoSort(ByVal list As IList(Of IComparable))
        While Not IsSorted(list)
            Shuffle(list)
        End While
    End Sub     Private Sub Shuffle(ByVal list As IList(Of IComparable))
        Dim r = New Random()
        For i = 0 To list.Count - 1
            Dim value = r.Next(list.Count)             Dim temp = list.Item(i)             list.Item(i) = list.Item(value)             list.Item(value) = temp
        Next i
    End Sub     Private Function IsSorted(ByVal list As IList(Of IComparable)) As Boolean
        If list.Count < 2 Then
            Return True
        End If
        For i = 0 To list.Count - 2
            If list.Item(i).CompareTo(list.Item(i + 1)) > 0 Then
                Return False
            End If
        Next i
        Return True
    End Function End Class

ま、これの中身はそれほど大切じゃなくってぇ、問題は次のMy名前空間への追加ですね。

この部分↓

メンバを My 名前空間に追加するには、必要に応じてモジュールにプロパティを追加します。My 名前空間に追加されるプロパティごとに、ThreadSafeObjectProvider(Of T) 型のプライベート フィールドを追加します。この型は、カスタム プロパティによって返される型です。このフィールドは、GetInstance メソッドの呼び出しによってプロパティから返されるスレッド セーフなオブジェクト インスタンスの作成に使用されます。その結果、拡張プロパティにアクセスする各スレッドは、返された型の独自のインスタンスを受け取ります。次の例では、SampleExtension 型の SampleExtension というプロパティを My 名前空間に追加します。

My 名前空間へのカスタム オブジェクトの追加

ふむふむ…こういうことかな?

Namespace My
    <Global.Microsoft.VisualBasic.HideModuleName()> _     Module MyExtention
        Private _myAlgorithmProvider As New ThreadSafeObjectProvider(Of MyAlgorithm)
        Friend ReadOnly Property Algorithm() As MyAlgorithm             Get                 Return _myAlgorithmProvider.GetInstance()             End Get         End Property
    End Module
End Namespace

で、ThreadSafeObjectProvider(Of T) ってなんぞ?


オブジェクトブラウザでも見つからない…。というわけでつづく。

posted @ 19:48 | Feedback (5)