, , , SO. , , ; , .
-
:
object a = new String(...);
!
List<object> c = new List<string>();
, , object string. . , . . :
void Foo<T>() where T: BaseParamClass
{
BaseClass<BaseParamClass> a = new BaseClass<T>();
}
T BaseParamClass . . , , Register, .
. . , , :
List<object> a = new List<string>();
:
IEnumerable<object> e = new List<string>();
IEnumerable , :
interface IEnumerable<out T>
, . , out : ...
interface IEnumerable<out T>
{
T Item[int index];
}
... :
interface IEnumerable<out T>
{
Add(T item);
}
- , , () .
, (, -), BaseClass<T>. , T, , .
, .
, , .
-
, , , . , , .
interface IStackable
{
string Title { get; set; }
}
:
public class ListHandler
{
private readonly Dictionary<string, IStackable> list;
public ListHandler()
{
list = new Dictionary<string, IStackable>();
}
public void Register(IStackable item)
{
list.Add(item.Title, item);
}
}
public class BaseClass<T> : IStackable where T : BaseParamClass
{
private ListHandler listHandler;
public T Param { get; private set; }
public BaseClass(ListHandler listHandler)
{
this.listHandler = listHandler;
listHandler.Register(this);
}
public string Title { get; set; }
}
, , .