1

我在 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' Domain ......

参数 1:无法从 'DatabaseLayer.MessageDoa' 转换为 'DatabaseLayer.TextDoa' Domain ......

但是 MediaDoa 和 TextDoa 使用 MessageDoa...

4

0 回答 0