2010-12-08 7 views
1

У меня есть следующий:общий конструктор, возможно, очень глупый вопрос

GenericClass<T> : Class 
{ 
    T Results {get; protected set;} 
    public GenericClass<T> (T results, Int32 id) : base (id) 
    { 
    Results=results; 
    } 
    public static GenericClass<T> Something (Int32 id) 
    { 
    return new GenericClass<T> (i need to pass something like new T?, id); 
    } 
} 

Update T может быть любым типом или значением, так что использование нового() является okish для некоторых типов, но определенно не для значений. Полагаю, это подразумевало бы некоторую переделку класса.

Идея заключалась в том, как использовать конструктор? например, возможно ли передать что-то подобное новому T (хотя это не должно быть, потому что T не известно в то время), или что будет твистом, чтобы избежать пропускания null?

+0

Не глупо вообще. Вы должны увидеть ** некоторые ** из вопросов, размещенных здесь> ;-) – smirkingman 2010-12-09 16:14:08

ответ

1
class GenericClass<T> : Class where T : new() 
{ 
    public T Results {get; protected set;} 
    public GenericClass (T results, Int32 id) : base (id) 
    { 
    Results=results; 
    } 
    public static GenericClass<T> Something (Int32 id) 
    { 
    return new GenericClass<T> (new T(), id); 
    } 
} 
3

Это должно работать:

GenericClass<T> : Class where T : new() 
{ 
    T Results {get; protected set;} 
    public GenericClass<T> (T results, Int32 id) 
    { 
    Results=results; 
    } 
    public GenericClass<T> Something (Int32 id) : this(new T(), id) 
    { } 
} 
+0

То, что я собирался сказать, вы избили меня. Для OP в основном вам просто нужно ограничить T классами, которые имеют известный публичный конструктор (здесь, конструктор по умолчанию). – KeithS 2010-12-08 17:46:05

0

Как об использовании отражения?

public static GenericClass<T> Something (Int32 id) 
    { 
    return new GenericClass<T> ((T)Activator.CreateInstance(typeof(T)), id); 
    } 
+0

ПУТЬ сверху, и хотя этот компилятор все равно будет терпеть неудачу во время выполнения, если у T не было открытого конструктора без параметров. – KeithS 2010-12-08 18:23:01

Смежные вопросы