Вы можете использовать другой класс, который реализует как IBaseModel, так и IList, и тогда T ограничивается этим классом.
public class DerivedModel : IBaseModel, IList<IBaseModel>
{
private int _size;
private IBaseModel[] _items=new IBaseModel[1000];
private int _version;
public int Id { get; set; }
public IEnumerator<IBaseModel> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
...
}
И универсальный метод:
public async Task<T> Get<T>(string url) where T : DerivedModel
{
return await Task<T>.Factory.StartNew(() =>
{
var derivedModel = new DerivedModel() {new BaseModel() {Id = 1}};
return (T) derivedModel;
});
}
В которомIBaseModel и BaseModel могут быть:
public interface IBaseModel
{
int Id { get; set; }
}
public class BaseModel : IBaseModel
{
public int Id { get; set; }
}
Использование:
var inheritance=new Inheritance();
var result = await inheritance.Get<DerivedModel>("aaa");
textBox1.Text = result[0].Id.ToString();