【发布时间】:2014-06-12 13:26:43
【问题描述】:
对于任何有 C# 经验的人来说,这个问题应该很容易解决。我想这样做,以便科目可以有一个课程列表。此应用程序中有导师和学生。因此,我创建了一个通用主题,它定义了 Tutor_Subject 和 Student_Subject 实现的属性。但是我遇到了一个奇怪的铸造错误。
public interface Subject<TCourse> where TCourse : Course
{
int SubjectId { get; set; }
string Name { get; set; }
ICollection<TCourse> Courses { get; set; }
}
public partial class Student_Subject :Subject<Student_Course>
{
}
public partial class Tutor_Subject :Subject <Tutor_Course>
{
}
public interface Course
{
int CourseId { get; set; }
string Name { get; set; }
}
public partial class Student_Course :Course
{
}
public partial class Tutor_Course :Course
{
}
问题来了
无法将类型“Tutor_Subject”隐式转换为“Course”。存在显式转换(您是否缺少演员表?)
Subject<Course> subject;
if(type ==1)
{
subject = new Student_Subject(); // Error
courseList = subjectInfo["courses"].ToObject<IList<Student_Course>>();
}
else
{
subject = new Tutor_Subject(); // Error
courseList = subjectInfo["courses"].ToObject<IList<Tutor_Course>>();
}
subject.Name = subjectName;
subject.Courses = courseList.ToList();
【问题讨论】:
-
嗯,有什么问题吗?
Student_Subject是Subject<Student_Course>,不是Subject<Course>,subject被声明为。 -
我回答了这个问题,但我更喜欢删除它,因为您的问题不清楚,或者它错误的命名约定会造成很多混乱(接口以
I大写字母开头...),我相信存在设计缺陷。 -
我怎样才能拥有一个由 Student_Subject 和 Tutor_Subject 实现的具有“课程”列表的主题接口。 Course是Student_Course和Tutor_Course实现的接口
标签: c# generics inheritance types casting