2011-12-20 14 views
1

私はレジスタプロパティメソッドにデフォルト値を与えようとしています。これには関数が必要でしたが、オブジェクトとして渡されました(デリゲート?)。ここでは、コードです:関数ではなく関数として関数を渡す方法はありますか?

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

これは関数として渡された関数ですが、私はそれをオブジェクトとして渡す必要があります。

これについてのご意見はありますか? VB 2008以上と

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 

あなたが持っているものを使用することができます:

registerproperty("Item", GetType(IEnumerable(Of Person)), Function() New Person) 
+1

'AddressOf'演算子を使用します。 [VB代理人のドキュメント](http://msdn.microsoft.com/en-us/library/ms172879.aspx)には多くの例があります。 –

+0

コードは大体正しいですが、ラムダは 'Func 'の代わりになります。使用するVisual Studioのバージョンを記録します。 –

+1

[トピックを外して] Raymondさんを見てみましょう。 – HardCode

答えて

1

時には、代わりに関数のサブでの作業は問題を解決し、我々はそのようにいくつかの問題を解決してきました。

Public Shared ReadOnly ItemsProperty As PropertyData = RegisterProperty("Items", GetType(IEnumerable(Of Person)), Sub() new Person()) 
1

これでもフレームワークの古いバージョンのために働く必要がありますオブジェクトを返す関数。オブジェクトを渡す必要はありません。

Function() new Person()はVBで、このような機能を表すラムダ式です。

() => new Person()は、C#で同じです。

あなたItemsProperty As PropertyDataデフォルト値が必要な場合に自動的にこの関数を呼び出します。

+0

Lambdaは言語機能です(VB 2008の別名VB9など)。フレームワークの機能ではありません。 –

+0

訂正していただきありがとうございます。編集されました。 – Jay

0

パラメータFunc<object> createDefaultValueはあなたが合格しなければならないことを意味

関連する問題