2

我是 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 ?

谢谢!阿米特

4

3 回答 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 可能是可行的,但它可能不是您想要的。

于 2009-02-27T03:55:48.310 回答
1

在 Visual Basic 2008 中遇到了同样的问题。

在我可以迁移到 Visual Basic 2010 之前,属性包将暂时满足我的需求:

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

于 2010-04-27T18:28:41.383 回答
0

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

于 2009-02-27T00:45:15.163 回答