2009-02-27 5 views
1

Я новичок vb.net, поэтому, пожалуйста, несите меня. Возможно ли создать свойства (или атрибуты) для класса в визуальном базовом (я использую Visual Basic 2005)? Все веб-поиски метапрограммирования привели меня в никуда. Вот пример, чтобы прояснить, что я имею в виду.Динамические свойства для классов в Visual Basic

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

ответ

0

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

3

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

Я считаю, что это возможно с помощью профилирующих API, но это скорее всего не то, что вы ищете.

+0

сериализации, что может быть интересно , –

+0

@ Angry Jim, в любое время объект вовлечен, сериализация является рискованным предложением. – JaredPar

+0

@ JaredPar - Это хорошо и может работать для меня. BTW У меня нет жесткого требования использовать существующий класс. Я в порядке с созданием класса динамически. Я посмотрел на System.Reflection.Emit вчера, и это было глазом! - Принимать – Amit