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的时间太长了。