Динамические свойства для классов в 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)

Нет, это невозможно. Для обработки неизвестного вызова .Foo вам понадобится Ruby, например "method_missing". Я считаю, что C# 4 обещает что-то в этом роде.

Невозможно изменить класс во время выполнения с новыми свойствами 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