我在接口实现方面遇到了一些麻烦,我尝试的所有“修复”方法似乎都使整个解决方案更加复杂和错误。我相信有一个简单的答案,但我现在还没有完全看清楚!
我有这两个接口(第二个接口在第一个接口的列表中使用):
以下是我(错误的)实现尝试:
我目前遇到的主要错误是在 APEditViewModel 中,以下是(精简后的)错误信息:
我有这两个接口(第二个接口在第一个接口的列表中使用):
public interface IUserDefinedListEditViewModel<T> where T : IUserDefinedListEntryEditViewModel<IBaseUserDefinedListModel>
{
string TypeName { get; set; }
IList<T> UserDefinedListEntries { get; set; }
}
public interface IUserDefinedListEntryEditViewModel<T> where T : IBaseUserDefinedListModel
{
string Display { get; set; }
T UserDefinedListEntry { get; set; }
}
我有一个第三方接口,由几个不同的类实现:
public interface IBaseUserDefinedListModel
{
Guid Id { get; set; }
string Name { get; set; }
bool IsSystem { get; set; }
}
以下是我(错误的)实现尝试:
public class APEditViewModel : IUserDefinedListEditViewModel<APEntryEditViewModel>
{
public string TypeName { get; set; }
public IList<APEntryEditViewModel> UserDefinedListEntries { get; set; } = new List<APEntryEditViewModel>();
}
public class APEntryEditViewModel : IUserDefinedListEntryEditViewModel<APModel>
{
public string Display { get; set; }
public APModel UserDefinedListEntry { get; set; }
}
public class BaseUserDefinedListModel : IBaseUserDefinedListModel
{
public Guid Id { get; set; }
[Required(ErrorMessage = "The Name field is required.")]
public string Name { get; set; }
public bool IsSystem { get; set; }
}
public class APModel : BaseUserDefinedListModel
{
public string NewValue { get; set; }
}
我目前遇到的主要错误是在 APEditViewModel 中,以下是(精简后的)错误信息:
The type 'APEntryEditViewModel' cannot be used as type parameter 'T' in the
generic type or method 'IUserDefinedListEditViewModel<T>'. There is no
implicit reference conversion from 'APEntryEditViewModel' to
'IUserDefinedListEntryEditViewModel<IBaseUserDefinedListModel>'.
我不确定我是否需要这种通用接口,但是经过我的研究和实验,我相信我需要。我只是没有完全理解,并且我认为IUserDefinedListEditViewModel
界面需要一个类型界面 (IUserDefinedListEntryEditViewModel
) 是错误的。
抱歉我表达可能不够清晰,因为我不确定我哪里出了问题,所以任何问题我都会尽力回答/更新我的问题。