虽然未显示,但每个分部类都有Courses事件的实现。
public abstract class Subject<T> where T : Course
{
ICollection<T> Courses { get; set; }
}
public partial class Student_Subject :Subject<Student_Course >
{}
public partial class Tutor_Subject :Subject <Tutor_Course>
{}
public abstract class Course {}
public partial class Student_Course Course {}
public partial class Tutor_Course : Course {}
我收到了错误消息。
Subject<Course> subject;
if(type ==1)
{
subject = new Student_Subject(); // error
为什么我不能转换这种类型。 Student_Subject是一个主题。我是C#的新手,我花了一整天的时间来研究这个问题。我最初尝试使用接口,但为了使其工作,我不得不使它变为共同变体,只允许读访问。 (如果我没有记错的话)。我错过了什么,有没有更好的方法来实现这个愿望功能
答案 0 :(得分:1)
课程和Student_Course之间的差异可能无法隐式转换。你可以做的是使用动态:
dynamic subject;
if (id == 1)
subject = new Student_Subject();
或者你可以围绕这个使用某些设计模式;例如,使用围绕各种类型的学生类的包装类或具有自定义接口,您可以通过以下方式检查是否实现了一个实例:
object course;
//init logic
if (subject is IStudentSubject)
{
// Convert and do something with
}
有很多方便的方法。