Я хочу достичь в соответствии с ниже
// Property
public static T Type
{ get; set; }
private void Form1_Load(...)
{
List<Type> abc = new ...
// code.....
Как упоминалось выше, когда я загружаю Form1
, List
должен быть определен типа = Type (the property)
. Как я могу это достичь?
Type
- это имя свойства, T
- имя типа.
List<T> abc = new List<T>();
Я предполагаю, конечно, что вы параметризовали охватывающий класс как class CustomForm<T>
Не знаете, почему вы хотите установить это с помощью свойства или, если это вообще возможно, - хотите ли вы изменить тип после создания экземпляра или что-то еще?
Если у вас нет особых особых потребностей, возможно, вы можете просто использовать это?:
private void Form1_Load<T>(...) // Pass the type in here
{
List<T> abc = new List<T>();
}
Применение:
this.Form1_Load<targetType>(...);
В качестве альтернативы, передайте тип, когда вы создаете экземпляр класса, содержащего Form1_Load():
class Container<T>
{
private void Form1_Load(...)
{
List<T> abc = new List<T>();
}
}
Применение:
var instance = new Container<targetType>();
Form1
в моем примере. Как вы можете видеть в событии Form1_Load в ссылке, класс Student
устанавливается как тип List<>
. Теперь предположим, что есть еще один отчет для деталей учителей, и я хочу загрузить его в той же форме. Я сделаю еще один класс для Teachers Details
и загружу его в Form1
.
Вы можете создать построитель классов следующим образом:
public class GenericBuilder
{
public Type ParamType { get; set; }
public object CreateList() {
var listType = typeof(List<>);
ArrayList alist = new ArrayList();
alist.Add( this.ParamType );
var targetType = listType.MakeGenericType( (Type[])alist.ToArray(typeof(Type)) );
return Activator.CreateInstance( targetType );
}
}
и затем вы можете использовать его:
var builder = new GenericBuilder();
builder.ParamType = typeof( int );
var result = builder.CreateList();
T
? Универсальный параметр класса, который содержит код?