2017-05-29 52 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文档以及。

相关问题