Динамические свойства для классов в Visual Basic - PullRequest
2 голосов
/ 27 февраля 2009

Я новичок на 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?

Спасибо! Amit

Ответы [ 3 ]

3 голосов
/ 27 февраля 2009

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

1 голос
/ 27 апреля 2010

натолкнулся на это удивительно то же самое для Visual Basic 2008.

Пакет свойств пока будет работать до тех пор, пока я не смогу перейти на Visual Basic 2010:

http://blogs.msdn.com/vbteam/archive/2010/01/20/fun-with-dynamic-objects-doug-rothaus.aspx

0 голосов
/ 27 февраля 2009

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

...