无法从

时间:2015-10-27 14:41:54

标签: c# .net extending-classes

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

0 个答案:

没有答案