2

私は vb.net の初心者なので、ご容赦ください。Visual Basic (私は Visual Basic 2005 を使用しています) でクラスのプロパティ (または属性) を作成できますか? メタプログラミングに関するすべての Web 検索は、私をどこにも導きませんでした。これが私の言いたいことを明確にするための例です。

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

いいえ - それは不可能です。不明な .Foo 呼び出しを処理するには、"method_missing" のような Ruby が必要です。私は、C# 4 がこれらの方針に沿ったものを提供すると約束していると信じています。

于 2009-02-27T00:45:15.163 に答える