Там нет ничего плохого с решением публикуемого, но маятник качнулось в другую крайность: теперь он может быть использован только из модуля. Вот некоторые гибкие способы сделать это:
' no need for Public
Friend Function GetResourceStream(obj As Object, filName As String) As Stream
Dim t As Type = obj.GetType
Dim asm As Assembly = t.Assembly
Dim s As Stream = asm.GetManifestResourceStream(t, filName)
Return s
End Function
' usage:
Dim ss As Stream = GetResourceStream(Me, strFile)
Еще более многоразовым являются Extensions:
<Extension>
Friend Function GetResourceStream(obj As Object, filName As String) As Stream
Dim T As Type = obj.GetType
Dim asm As Assembly = T.Assembly
Dim s As Stream = asm.GetManifestResourceStream(T, filName)
Return s
End Function
<Extension>
Friend Function GetResourceStream(T As Type, filName As String) As Stream
Dim asm As Assembly = T.Assembly
Dim s As Stream = asm.GetManifestResourceStream(T, filName)
Return s
End Function
Первым является самым простым, но только грузы из этой сборки:
Dim s = Me.GetResourceStream(strFile)
Второй - немного громоздкий, но более гибкий:
Dim s = GetType(Foo).GetResourceStream(strFile)
Несмотря на неуклюжесть, он позволяет типу (Foo
) действовать как ресурс «локатор». Если ресурсы находятся в другой сборке, определите Foo
в той же сборке для загрузки ресурсов оттуда. В идеале вы бы использовали реальный тип, который уже используется вашим приложением, но когда его нет, будет работать пустой класс Foo
или ResLocator
.
Вы также можете переопределить расширения просто как Friend Shared
для использования в служебном классе.
Me относится к текущему/локальному объекту, который не является модулем. Он должен работать, чтобы передать 'Me' процедуре As Object или Type avalable – Plutonix