2011-01-03 9 views
2

を疑問視。C#4.0オプションパラメータは、私はそのような実装を持つ

私は値const string defaultKeyPropertyName = "Id"をちょうど1つの場所に宣言することができますし、どこでも同じように使うことができます。

//... 
void Update<T>(T entity, string keyPropertyName = defaultKeyPropertyName) where T : class; 
void Delete<T>(T entity, string keyPropertyName = defaultKeyPropertyName) where T : class; 
//.. 

それ以外は何とかできますか?

答えて

3

必要に応じてconstを使用し、それを保持するクラスを作成できます。 C#グローバル変数の概念がないので、これはそれが得る限り近い:

public static class Defaults 
{ 
    public const string KeyName = "Id";   
} 

public abstract class GenericRepositoryBase 
{ 
    //... 
    protected abstract void Update<T>(T entity, string keyPropertyName = Defaults.KeyName) where T : class; 
    protected abstract void Delete<T>(T entity, string keyPropertyName = Defaults.KeyName) where T : class; 
    //.. 
} 
1

AFAIKの任意のパラメータ値は定数である必要があります。したがって、どこにでも宣言することはできません。

+1

ステートメントの最初の部分は正しいものの、定数はどこでも(ほぼ)宣言できます。 – grenade

0

はたぶん、あなたは、インターフェイスにkeyPropertyNameのデフォルト値を定義していませんが、抽象クラスでは、あなたが導入する可能性抽象クラスの定数

+0

私はそれを試してみましたが、このような場合にはオプションのパラメータ文字列keyPropertyNameはオプションではありませんが、このオプションのものを保持することもできません。 – Kuncevic

関連する問題