C#接口强制执行另一个接口的属性?

C#接口强制执行另一个接口的属性?,c#,interface,inheritance,C#,Interface,Inheritance,鉴于此代码: public interface ITagModel { } public interface ITemplate { ITagModel Model { get; set; } } public class EmailTag : ITagModel { } public class EmailTest : ITemplate { public EmailTag Model { get; set; } } 我被告知,EmailTag(在EmailClass内

鉴于此代码:

public interface ITagModel { }

public interface ITemplate {
    ITagModel Model { get; set; }
}

public class EmailTag : ITagModel { }

public class EmailTest : ITemplate {
    public EmailTag Model { get; set; }
}
我被告知,
EmailTag
(在
EmailClass
内部)的类型无法实现属性
Model
,因为它不是
ITagModel
类型

public interface ITagModel { }

public interface ITemplate<TModel>
    where TModel : ITagModel
{
    TModel Model { get; set; }
}

public class EmailTag : ITagModel { }

public class EmailTest : ITemplate<EmailTag> {
    public EmailTag Model { get; set; }
}
它继承了ITagModel…那么为什么它不起作用呢?我能做些什么来完成我想要的东西?

C#不支持

e、 g

因此,您需要抽象返回类型并将其约束到接口。这样,任何实现都需要提供
ITagModel

public interface ITagModel { }

public interface ITemplate<TModel>
    where TModel : ITagModel
{
    TModel Model { get; set; }
}

public class EmailTag : ITagModel { }

public class EmailTest : ITemplate<EmailTag> {
    public EmailTag Model { get; set; }
}
公共接口ITagModel{}
公共接口项目板
其中TModel:ITagModel
{
t模型{get;set;}
}
公共类EmailTag:ITagModel{}
公共类EmailTest:ITemplate{
公共EmailTag模型{get;set;}
}
C#不支持

e、 g

因此,您需要抽象返回类型并将其约束到接口。这样,任何实现都需要提供
ITagModel

public interface ITagModel { }

public interface ITemplate<TModel>
    where TModel : ITagModel
{
    TModel Model { get; set; }
}

public class EmailTag : ITagModel { }

public class EmailTest : ITemplate<EmailTag> {
    public EmailTag Model { get; set; }
}
公共接口ITagModel{}
公共接口项目板
其中TModel:ITagModel
{
t模型{get;set;}
}
公共类EmailTag:ITagModel{}
公共类EmailTest:ITemplate{
公共EmailTag模型{get;set;}
}

听起来您的
ITemplate
界面应该是通用的:

public interface ITemplate<TModel> where TModel : ITagModel
{
    TModel Model { get; set; }
}

。。。你不会想要的。(基本上,您违反了类型安全。)

听起来您的
ITemplate
界面应该是通用的:

public interface ITemplate<TModel> where TModel : ITagModel
{
    TModel Model { get; set; }
}

。。。你不会想要的。(基本上,你会违反类型安全。)

我知道我在放屁。显然,我已经在Javascript上工作了太多周了。我知道我脑子里有个屁。显然,使用Javascript的时间太长了。