小编Fam*_*erd的帖子

这是一个协方差问题吗?不确定是否砖墙

我编写了ASP.NET页面来管理表单.它们基于以下基类.

public abstract class FormPageBase<TInterface, TModel> : Page, IKeywordProvider 
        where TModel:ActiveRecordBase<MasterForm>, TInterface, new()
        where TInterface:IMasterForm
    {
        public TInterface FormData { get; set; }                   
     }
Run Code Online (Sandbox Code Playgroud)

一个示例SubClass在这里:

public partial class PersonalDataFormPage : FormPageBase<IPersonalDataForm, PersonalDataForm>, IHasFormData<IPersonalDataForm>, IHasContact
    {
    }
Run Code Online (Sandbox Code Playgroud)

下面我在页面上有一个usercontrol,我想从页面"使用""FormData",以便它可以读/写它.

然后,我有一个更"通用"的用户控件,我想在我所有的表单子类的基接口上操作... IMasterForm

但是当usercontrol尝试强制转换Page.FormData时(尝试将页面强制转换为IHasFormData<IMasterForm>它)告诉我该页面IHasFormData<IFormSubclass>即使我对IFormSubclass有一个约束,它说它也是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 …
Run Code Online (Sandbox Code Playgroud)

.net c# generics covariance .net-3.5

4
推荐指数
1
解决办法
701
查看次数

标签 统计

.net ×1

.net-3.5 ×1

c# ×1

covariance ×1

generics ×1