От: | Аноним | ||
Дата: | 17.08.11 22:16 | ||
Оценка: |
namespace MyLib
{
// базовый обощённый класс, который наследует фукциональность от BizObjectT
public abstract class BizEntityBaseT<T> : BizObjectT<T> // для BizObjectT<T> ограничения where не задана
where T : BizEntityBaseT<T>
{
//
// некоторые базовые поля и методы для BizEntityBaseT<T>
//
}
// другой обобщённый класс, для Entity с произвольным ID
public abstract class BizEntityIDBaseTI<TEntity, TID> : BizEntityBaseT<TEntity>
where TEntity : BizEntityIDBaseTI<TEntity,TID>
where TID : struct
{
public abstract TID ID { get; set; }
//
// некоторые базовые поля, но уже для BizEntityIDBaseTI<T,I>
//
}
// базовый обощённый класс-список
public class BizEntitiesListBaseT<T> : BizObjectList<T> // для BizObjectList<T> ограничения where не задана
{
//
// некоторые базовые поля и функциональность, напрямую зависящая от T
//
}
public class BizEntitiesIDListBaseTI<T,I> : BizEntitiesListBaseT<T>
where T : BizEntityIDBaseTI<T,I>
where I : struct
{
//
// некоторые базовые поля и функциональность, напрямую зависящая от T и I
//
}
}
namespace Program
{
// на этот класс можно не обращать внимание - здесь он просто как вариант
public abstract class BizEntityBase : MyLib.BizEntityBaseT<BizEntityBase>
{
//
// некоторые базовые поля и функциональность для Program.BizEntityBase
//
}
public abstract class BizEntityIDBaseTI<T,I> : MyLib.BizEntityIDBaseTI<BizEntityIDBaseTI<T,I>, I>
where T : BizEntityIDBaseTI<T,I>
where I : struct
{
//
// некоторая функциональность для Program.BizEntityIDBaseTI<T,I>
//
}
public abstract class BizEntityGuidBaseT<T> : MyLib.BizEntityIDBaseTI<BizEntityGuidBaseT<T>,Guid>, Guid>
where T : BizEntityGuidBaseT<T>
{
//
// некоторые базовые поля и функциональность (в основном static), напрямую зависящая от T с учётом, того что T - BizEntityGuidBaseT<T>
//
}
// *** вот здесь ошибка компиляции
public class BizEntitiesIDListBaseTI<T,I> : MyLib.BizEntitiesIDListBaseTI<T,I>
where T : BizEntityIDBaseTI<T,I>
where I : struct
{
//
// некоторая функциональность для Program.BizEntityIDBaseTI<T,I>
//
}}
Error 1 The type 'T' cannot be used as type parameter 'T' in the generic type or method 'MyLib.BizEntitiesIDListBaseTI<T,I>'. There is no implicit reference conversion from 'T' to 'MyLib.BizEntityIDBaseTI<T,I>'.