无法隐式转换类型的抽象类

时间:2014-04-27 23:16:20

标签: c# inheritance abstract-class

虽然未显示,但每个分部类都有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#的新手,我花了一整天的时间来研究这个问题。我最初尝试使用接口,但为了使其工作,我不得不使它变为共同变体,只允许读访问。 (如果我没有记错的话)。我错过了什么,有没有更好的方法来实现这个愿望功能

1 个答案:

答案 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
}

有很多方便的方法。