2017-11-28 17 views
-7

私はクラスコンストラクタを持っています。 誰かが2番目のパラメータを説明できますか? Idは汎用オブジェクトを第1パラメータとして、オプションのGUIDを第2パラメータとして持つ関数ですか? Idは2番目のパラメータとして最初のパラメータとオプションのGUIDなどの一般的なオブジェクトと機能クラスコンストラクタ内の汎用オブジェクト

public myClass(int identifier, Func<T, Guid?> Id) 
+1

さに応じて異なった作品ですおそらく、これは汎用クラスmyClass 'で宣言されています。 –

+0

Idは汎用オブジェクトを取り、Nullable 、つまりGuidまたはnull値を返す関数です –

+3

質問をする前に少し研究を行う必要があります。 https://msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx –

答えて

2

ですか?

かなりです。これは、汎用オブジェクトを最初のパラメータとして持つ関数です(Tの型は、おそらくクラス定義内の他の場所で定義されています)。は、 nullable GUIDを返します。

-3

.Netはジェネリックコンストラクタをサポートしていないため、これをサポートする意味はありません。クラスレベルジェネリックを使用することでこれを実現できます。 は、コードの下で見てください、彼らは例えば、同じ方法のために(一般的なものである)のパラメータに応じて異なる反応をすることができますので、

class Program 
{ 
    static void Main(string[] args) 
    { 
     var result = new GenericImplementation<int>(1, GetGuid); 
     Console.WriteLine(result.Invoke(1)); 
     Console.ReadLine(); 
    } 

    public static Guid? GetGuid(int i) 
    { 
     //Do whateve you want to do 
     return new Guid(); 
    } 

} 

class GenericImplementation<T> 
{ 
    Func<T, Guid?> _id; 
    public GenericImplementation(int identifier, Func<T,Guid?> id) 
    { 
     _id = id; 
    } 

    public Guid? Invoke(T value) 
    { 
     return _id.Invoke(value); 
    } 

    public bool Equal<U>(U v1, U v2) 
    { 
     if (v1.GetType() == typeof(string)) 
     { 
      return v1.ToString() == v2.ToString(); 
     } 

     if (v1.GetType() == typeof(int)) 
     { 
      return int.Parse(v1.ToString()) == int.Parse(v2.ToString()); 
     } 

     if (v1.GetType() == typeof(object)) 
     { 
      //Deep level comparision 
      return true; 
     } 

     return false; 
    } 
} 

方法は、一般的なことができ、均等方法が提供されるパラメータ