Visual Basic中类的动态属性

时间:2009-02-27 00:05:55

标签: vb.net visual-studio-2005 metaprogramming

我是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 个答案:

答案 0 :(得分: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,但它可能不是你想要的。

答案 1 :(得分:1)

对于Visual Basic 2008来说,想到了同样的事情。

属性包现在可以帮到我,直到我可以迁移到Visual Basic 2010:

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

答案 2 :(得分:0)

不 - 那是不可能的。你需要像“method_missing”这样的Ruby来处理未知的.Foo调用。我相信C#4承诺提供这些方面的东西。