我在DatabaseLayer中有这四个类:
namespace DatabaseLayer
{
public class ReactionDoa
{
public int Id;
public MessageDoa Message;
public VisitorDoa User;
public string Text;
public DateTime Date;
}
public abstract class MessageDoa
{
public int Id;
public string Title;
public VisitorDoa User;
public CategoryDoa Category;
public DateTime Date;
}
public class MediaDoa : MessageDoa
{
public string Location;
}
public class TextDoa : MessageDoa
{
public string Message;
}
}
MediaSharing中有三节课:
namespace MediaSharing
{
public class Reaction
{
public Message Message { get; }
public Visitor User { get; }
public string Text { get; }
public DateTime Date { get; }
public Reaction(ReactionDoa r)
{
if (r.Message is Text)
{
this.Message = new Text(r.Message);
}
else if (r.Message is Media)
{
this.Message = new Media(r.Message);
}
User = new Visitor(r.User);
Text = r.Text;
Date = r.Date;
}
}
public class Text : Message
{
public string Message { get; }
public Text(string title, string message, Visitor user, Category category)
: base(title, user, category)
{
Message = message;
VisitorDoa u = new VisitorDoa()
{
Id = user.Id
};
CategoryDoa c = new CategoryDoa()
{
Id = category.Id
};
Database.Create.Text(u, title, c, message);
}
public Text(TextDoa m)
: base(m)
{
Message = m.Message;
}
}
public class Media : Message
{
public string Location { get; }
public Media(string title, string location, Visitor user, Category category)
: base(title, user, category)
{
Location = location;
VisitorDoa u = new VisitorDoa()
{
Id = User.Id
};
CategoryDoa c = new CategoryDoa()
{
Id = category.Id
};
Database.Create.Media(u, title, c, location);
}
public Media(MediaDoa m)
: base(m)
{
Location = m.Location;
}
}
}
当我尝试
时this.Message = new Text(r.Message);
和
this.Message = new Media(r.Message);
它返回 参数1:无法转换为' DatabaseLayer.MessageDoa'到' DatabaseLayer.MediaDoa'域......
和
参数1:无法转换为' DatabaseLayer.MessageDoa'到' DatabaseLayer.TextDoa'域......
但MediaDoa和TextDoa使用MessageDoa ...