2017-05-29 15 views
4

この質問は重複していると仮定します。 しかし、私はこの質問を見つけることができませんでした明示的ではなく総称パラメータでコンストラクタを呼び出す

私はジェネリッククラスをインスタンス化したいです。しかし、 明示的なパラメータを持つコンストラクタがあり、また、指定された型のためにジェネリックコンストラクタにそのパラメータがある場合、明示的なパラメータを持つコンストラクタが使用されます。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Example<string> test = new Example<string>("test"); 
     test.Print();//Prints test2 
    } 
} 

class Example<T> 
{ 
    private object Value; 

    public Example(T value1) 
    { 
     this.Value = value1 + "1"; 
    } 

    public Example(string value2) 
    { 
     this.Value = value2 + "2"; 
    } 

    public void Print() 
    { 
     Console.WriteLine(Value as string); 
    } 
} 

は、一般的なコンストラクタを呼び出すための方法はありますか?

Example<string> test = new Example<string>(value1: "test");

ここで重要なトリックは、あなたが現在持っているように異なるパラメータ名を持つことがあるので、パラメータ名から右のコンストラクタをマップします:

+0

はい。パラメータのないクラスに3番目のコンストラクタを追加します。 – jdweng

+0

私は本当にC#の人ではありませんが、コンストラクタで 'explicit'キーワードを試してみるとどうなりますか?私の試みは 'string'コンストラクタになります。 – aardvarkk

答えて

5

名前付きパラメータを使用して、以下のような構文を使用することができますコードは次のようになります。

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     Example<string> test = new Example<string>(value1: "test"); 
     test.Print();//Prints test1 
    } 

class Example<T> 
{ 
    private object Value; 

    public Example(T value1) 
    { 
     this.Value = value1 + "1"; 
    } 

    public Example(string value2) 
    { 
     this.Value = value2 + "2"; 
    } 

    public void Print() 
    { 
      Console.WriteLine(Value as string); 
     } 
    } 
} 

あなたにも名前付きパラメータにhereドキュメントを見つけることができます。

関連する問題