我正在尝试为register属性方法提供一个默认值。这需要一个函数,但作为一个对象传递(委托?)。这是代码:
protected static propertydata registerproperty(string name, Type type, Func<object> createDefaultValue)
{
return RegisterProperty(name, type, createDefaultValue, false, null);
}
我想调用registerproperty方法,但我不知道如何在VB.net中做到这一点。我只需要传递一个新的Person对象,我认为这是要走的路:
Public Shared ReadOnly ItemsProperty As PropertyData = RegisterProperty("Items", GetType(IEnumerable(Of Person)), Function() new Person())
这是一个作为函数传递的函数,但我需要它作为对象传递。
对此有何想法?
答案 0 :(得分:1)
这甚至适用于旧版本的框架:
Public Shared Function whatever() As propertyData
registerproperty("item", GetType(IEnumerable(Of Person)), AddressOf GetObject)
End Function
Public Shared Function GetObject() As Person
return New Person
End Function
使用VB 2008或更高版本,您可以使用您拥有的内容:
registerproperty("Item", GetType(IEnumerable(Of Person)), Function() New Person)
答案 1 :(得分:1)
有时,使用sub而不是函数可以解决问题,我们已经解决了一些问题。
Public Shared ReadOnly ItemsProperty As PropertyData = RegisterProperty("Items", GetType(IEnumerable(Of Person)), Sub() new Person())
答案 2 :(得分:0)
参数Func<object> createDefaultValue
表示您必须传递一个返回对象的函数。您不必传递对象。
Function() new Person()
是一个lambda表达式,它表示VB中的这样一个函数。
() => new Person()
在C#中是相同的。
当需要默认值时,ItemsProperty As PropertyData
会自动调用此功能。