我写过协会。 互联网网页将管理表格。 他们根据以下基类重新计算。
public abstract class FormPageBase<TInterface, TModel> : Page, IKeywordProvider
where TModel:ActiveRecordBase<MasterForm>, TInterface, new()
where TInterface:IMasterForm
{
public TInterface FormData { get; set; }
}
这里有一个样本:
public partial class PersonalDataFormPage : FormPageBase<IPersonalDataForm, PersonalDataForm>, IHasFormData<IPersonalDataForm>, IHasContact
{
}
下面的网页上有一个用户控制,我想从网页上“浏览”“FormData”,以便阅读/阅读。
然后,我还要在我所有表格子的基调上进行“共同”用户控制。 IMaster 表格
但当用户控制制成页时。 FormData(试图将网页投到) IHasFormData<IMasterForm>
它告诉我,网页是 IHasFormData<IForm Subster>
,尽管我对IForm Subclass有限制,但他说也是IMasterForm
是否有从普通子类向普通超级类别投放的任何途径,或者这种“活力”和C# 4.0 是的?
public abstract class FormControlBase<T> : UserControl, IKeywordProvider
where T:IMasterForm
{
protected T FormData { get; set; }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//This cast is failing when my common control s T does not exactly match
// the T of the Page.. even though the common controls TInterface is a base interface to the
//pages TInterface
FormData = ((IHasFormData<T>) Page).FormData;
if (!IsPostBack)
{
PopulateBaseListData();
BindDataToControls();
}
}
protected abstract void PopulateBaseListData();
protected abstract void BindDataToControls();
public abstract void SaveControlsToData();
#region IKeywordProvider
public List<IKeyword> GetKeywords(string categoryName)
{
if(!(Page is IKeywordProvider ))
throw new InvalidOperationException("Page is not IKeywordProvider");
return ((IKeywordProvider) Page).GetKeywords(categoryName);
}
#endregion
}