C#接口不';不允许成员类满足要求
抱歉,如果标题不是很有描述性。我不知道该怎么形容这个 首先,我创建了如下界面:C#接口不';不允许成员类满足要求,c#,interface,C#,Interface,抱歉,如果标题不是很有描述性。我不知道该怎么形容这个 首先,我创建了如下界面: public interface IUser {} public class Student : IUser {} public class Teacher : IUser {} 然后在几个类中实现它,如下所示: public interface IUser {} public class Student : IUser {} public class Teacher : IUser {} 然后我创建了一
public interface IUser {}
public class Student : IUser {}
public class Teacher : IUser {}
然后在几个类中实现它,如下所示:
public interface IUser {}
public class Student : IUser {}
public class Teacher : IUser {}
然后我创建了一个需要第一个接口的接口
public class IUsers
{
List<IUser> Users {get; set;}
}
公共类用户
{
列出用户{get;set;}
}
然后我创建了一个类,它使用第二个接口,但使用第一个接口的一个成员来填充契约
public class Students : IUsers
{
List<Student> Users {get; set;}
}
公共班级学生:IUsers
{
列出用户{get;set;}
}
问题是最后一个我想要将列表限制为接口的一个实现,但仍然需要维护接口以实现数据兼容性。当我这样做时,我会得到一个错误,说我没有实现接口。我认为既然Student实现了这个接口,它就可以满足这个义务,但它似乎没有。这是正确的还是我做错了什么您需要说明您的收藏支持什么类型的用户。假设您的代码是有效的-那么这将编译:
IUsers users = new Students();
// What would this do at execution time? It's not safe!
users.Users.Add(new Teacher());
毕竟,这只是在列表中添加一名教师
,对吗?但是在学生
中,用户
属性是一个列表
,因此不能接受教师
最好的方法可能是使您的IUsers
界面在其接受的用户类型中具有通用性:
public class IUsers<TUser> where TUser : IUser
{
List<TUser> Users {get; set;}
}
根据代码,对我来说,示例似乎表明您希望为用户维护单独的实现,然后返回所需的实现
public interface IStudentFactory
{
IUser Create();
}
public class StudentFactory
{
public IUser Create() => new StudentContext();
}
然后,根据您在IUser接口中的实现,您可以连接到数据存储来管理这些类型的用户
var context = new StudentFactory().Create())
var students = context.GetAllStudents();
context.Students.Add(new Student() { });
我提供的方法是基于这样一个概念,即您希望能够访问有关不同类型用户的信息、持久化和管理。您的示例显示了您正在添加的一个基本集合,可能会处理其他功能,但我认为您正在朝着更一致的方向努力
我可能不理解你的意图,但我就是这样解释的 这是一种标准类型的安全违规行为。如果这可以编译,那么代码可以使用接口将一个对象添加到实现IUser但不是学生的列表中。我想这就是我想要的,谢谢@邪恶寿司我有一种感觉,你试图实现上述目标,但不知道如何实现。很高兴这有帮助。