c# - Implementing collection of a generic class -
i trying create custom class follows.
public myclass<t> { public string value1 { get; set; } public t value2 { get; set; } public string value3 { get; set; } }
the value of t either string or int or datetime .i assume can create new instance of class like
myclass<int> intclass = new myclass<int>(); myclass<string> stringclass=new myclass<string>();
and forth.
is possible create collection of above classes can put intclass , stringclass custom collection.
if want mix different generic types (so have collection containing both myclass<int>
, myclass<string>
) need define common base type or use collection not typed:
public class myclass<t> : myclass { public t value2 { get; set; } } public class myclass { public string value1 { get; set; } public string value3 { get; set; } }
then can define collection like:
list<myclass> list = new list<myclass>(); list.add(new myclass<int>()); list.add(new myclass<string>());
you have cast results when retrieving entries in order access value2
property though.
another option avoid base-class use list<object>
:
list<object> list = new list<object>(); list.add(new myclass<int>()); list.add(new myclass<string>());
but it's same problem above, plausibly worse (because can store anything in there)
edit: there various ways of how allow untyped access value2
in base non-generic myclass
. 1 way define "untyped" version of on base class , override on subclass perform type-checking:
public abstract class myclass { public string value1 { get; set; } public abstract object value2untyped { get; set; } public string value3 { get; set; } } public class myclass<t> : myclass { public t value2 { get; set; } public override object value2untyped { { return value2; } set { value2 = (t)value; } } }
then objects or collections typed against base non-generic myclass
, can still access values, , set values @ runtime. (the set
of course optional)
Comments
Post a Comment