Как передать функцию как объект вместо функции? - PullRequest
1 голос
/ 20 декабря 2011

Я пытаюсь дать значение по умолчанию для метода свойства регистра. Это требовало функции, но передавалось как объект (делегат?). Вот код:

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())

Эта функция передается как функция, но мне нужно передать ее как объект.

Есть мысли по этому поводу?

Ответы [ 3 ]

1 голос
/ 25 апреля 2012

Иногда работа с подпрограммой вместо функции решает проблему, поэтому мы решили некоторые проблемы таким образом.

Public Shared ReadOnly ItemsProperty As PropertyData = RegisterProperty("Items", GetType(IEnumerable(Of Person)), Sub() new Person())
1 голос
/ 20 декабря 2011

Это должно работать даже для более старых версий фреймворка:

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)
0 голосов
/ 21 декабря 2011

Параметр Func<object> createDefaultValue означает, что вам нужно передать функцию, которая возвращает объект. Вам не нужно передавать объект.

Function() new Person() - лямбда-выражение, представляющее такую ​​функцию в VB.

() => new Person() то же самое в C #.

Ваш ItemsProperty As PropertyData автоматически вызовет эту функцию, когда потребуется значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...