Динамические свойства для классов в Visual Basic
Я новичок в vb.net, так что терпите меня. Можно ли создать свойства (или атрибуты) для класса в Visual Basic (я использую Visual Basic 2005)? Все поиски метапрограммирования в Интернете ни к чему не привели. Вот пример, чтобы прояснить, что я имею в виду.
public class GenericProps
public sub new()
' ???
end sub
public sub addProp(byval propname as string)
' ???
end sub
end class
sub main()
dim gp as GenericProps = New GenericProps()
gp.addProp("foo")
gp.foo = "Bar" ' we can assume the type of the property as string for now
console.writeln("New property = " & gp.foo)
end sub
Так можно ли определить функцию addProp?
Спасибо! Амит
Ответов (3)3
Невозможно изменить класс во время выполнения с новыми свойствами 1 . VB.Net - статический язык в том смысле, что он не может изменять определенные классы во время выполнения. Вы можете смоделировать то, что ищете, с помощью сумки с недвижимостью.
Class Foo
Private _map as New Dictionary(Of String, Object)
Public Sub AddProperty(name as String, value as Object)
_map(name) = value
End Sub
Public Function GetProperty(name as String) as Object
return _map(name)
End Function
End Class
Он не разрешает прямой доступ в форме myFoo.Bar, но вы можете вызвать myFoo.GetProperty ("Bar").
1 Я считаю, что это возможно с помощью API-интерфейсов профилирования, но, скорее всего, это не то, что вы ищете.
Наткнулся на это удивительное то же самое для Visual Basic 2008.
Пока я не смогу перейти на Visual Basic 2010, пакет свойств подойдет мне:
http://blogs.msdn.com/vbteam/archive/2010/01/20/fun-with-dynamic-objects-doug-rothaus.aspx