无法隐式转换类型抽象类
本文关键字:类型 抽象类 转换 | 更新日期: 2023-09-27 18:00:22
虽然没有显示,但每个分部类都有一个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是一个Subject。我是C#的新手,为此我花了一整天的时间。我最初尝试使用接口,但为了使其发挥作用,我不得不使其成为仅允许读取访问的共同变体。(如果我没有记错的话)。我是不是遗漏了什么,有没有更好的方法来实现这个愿望功能
Course和Student_Course之间的差异可能无法隐式转换。您可以使用动态:
dynamic subject;
if (id == 1)
subject = new Student_Subject();
或者你可以围绕这个使用某些设计模式;例如,在各种类型的学生类周围使用包装类或具有自定义接口,您可以通过检查一个实例是否实现了这些接口
object course;
//init logic
if (subject is IStudentSubject)
{
// Convert and do something with
}
有一些方法是方便的。