2017-05-29 53 views
4

我假設這個問題是重複的。 但我找不到這個問題SO調用帶泛型參數的構造函數而不是顯式的

我想實例化一個泛型類。但是,如果有一個帶有顯式參數的構造函數,並且由於給定類型,泛型構造函數也具有該參數,則將使用具有顯式參數的構造函數。

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); 
    } 
} 

有沒有辦法來調用通用構造?

+0

是的。將第三個構造函數添加到不帶參數的類中。 – jdweng

+0

我不是一個真正的C#人,但是如果你在構造函數中嘗試了'explicit'關鍵字,會發生什麼?我的嘗試將在'string'構造函數上。 – aardvarkk

回答

5

您可以使用語法像下面的命名參數:

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

這裏最重要的訣竅是有不同的參數名稱爲您當前擁有,所以它會映射從參數名稱右邊的構造和代碼如下所示:

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文檔以及。

相關問題