2014-08-29 3 views
0

У меня есть список ...Доступ долевой собственности общего списка

Public Class DatabaseCollection(Of T) 
    Inherits List(Of T) 

    Private Shared _LookupTables As Dictionary(Of String, IEnumerable) 
    Public Shared ReadOnly Property LookupTables As Dictionary(Of String, IEnumerable) 
    Get 
     If _LookupTables Is Nothing Then 
     _LookupTables = New Dictionary(Of String, IEnumerable) 
     End If 
     Return _LookupTables 
    End Get 
    End Property 
End Class 

, и я хочу, чтобы получить доступ к этой недвижимости из других источников.

Как это сделать?

+0

Обратите внимание, что 'Словарь' не является потокобезопасным. Вместо этого вы можете использовать 'ConcurrentDictionary', если свойство имеет доступ несколькими потоками. – Magnus

+0

Я не уверен, что вы делаете или что вы просите. Кажется, вы расширяете общий список с помощью свойства, которое, как представляется, не зависит от списка, который поражает меня как немного. Можете ли вы точно определить, что такое намерение этого кода? Также меня смущает «Я хочу получить доступ к этому свойству из другого места. Как мне это сделать?». Ваш объект чувствует себя немного напуганным для меня, но является объектом, как любой другой, и вы получаете доступ к его свойствам, как и любой другой. – Chris

+0

@ Крис, вы говорите: «Вы можете получить доступ к его свойствам, как и любой другой». Можете ли вы опубликовать ответ и показать мне какой-то код, который это делает? 'DatabaseCollection.LookupTables' не компилируется. 'DatabaseCollection (Of) .LookupTables' также не компилируется. – toddmo

ответ

0

Я создал новый класс, Schema, который имеет общее свойство, содержащее словарь метаинформации для каждого типа, включая LookupTable. Конструктор Schema принимает тип, о котором идет речь, поэтому нет никакой двусмысленности.

-1

EDIT:

Лучший способ, которым я могу думать, чтобы справиться с этим будет еще один объект, который содержит ваш класс DatabaseCollection. Таким образом, ваш объект DatabaseCollection будет публичным свойством вашего объекта «Контейнер». Затем вы могли бы также иметь свои LookupTables в объекте «Контейнер», и он будет относить 1-1 для каждого DatabaseCollection.

В дополнение к классу DatabaseCollection (если у вас есть другие свойства/методы Если нет, то это может быть просто общий список..), А также включают в себя следующее:

Public Class ContainerForDatabaseCollection 
    Private Property _DbCollection as new DatabaseCollection 
    Public Readonly Property DbCollection as DatabaseCollection(of String) 
     Get 
      return _DbCollection 
     End Get 
    End Property 

    Private Shared Property _LookupTables As Dictionary(Of String, IEnumerable) 
    Public Shared ReadOnly Property LookupTables As Dictionary(Of String, IEnumerable) 
     Get 
      If _LookupTables Is Nothing Then 
       _LookupTables = New Dictionary(Of String, IEnumerable) 
      End If 

      Return _LookupTables 
     End Get 
    End Property 

public Sub New() 'Possibly include parameters for private properties... 
    'Initialize Private properties 
End Sub 

End Class 
+0

Вы можете просто сделать DatabaseCollection (Of String) .LookupTables. Но каждый тип коллекции, который я могу использовать для разных типов T, будет иметь отдельную коллекцию. Может быть, нет никакой возможности иметь одну коллекцию для всех T. (я не тот, кто занижен) – toddmo

+0

См. Мой отредактированный ответ. –

+0

, пожалуйста, добавьте пример кода, чтобы сделать его более понятным. Благодарю. – toddmo