У меня есть базовый класс с именем Message, например:
public abstract class Message
{
protected int m_id;
protected bool m_localized;
protected string m_metaData;
public int GetID() { return m_id; }
public bool GetLocalized() { return m_localized; }
public string GetMetadata() { return m_metaData; }
}
Затем у меня есть еще два класса, которые наследуются от Message, например:
public class ClassicMessage : Message
{
private string m_title;
private string m_content;
public void SetTitle(string title) { m_title = title; }
public void SetContent(string content) { m_content = content; }
public string GetTitle() { return m_title; }
public string GetContent() { return m_content; }
}
public class MessageWithCustomContent : Message
{
private List<CustomContent> m_content;
public MessageWithCustomContent()
{
m_content = new List<CustomContent>();
}
public List<CustomContent> GetContent()
{
return m_content;
}
public CustomContent GetContentEntry(int id)
{
return m_content.find(x => x.ID.Equals(id));
}
}
public class CustomContent
{
private int m_id;
public int ID { get; set { m_id = value; } }
private string m_body;
public string Body { get { return m_body; } set { m_body = value; }
private Image m_image;
public Image Image { get { return m_image; } set { m_image = value; } }
}
Как в таком случае унифицировать интерфейс приложения, если производные классы имеют похожие методы, но эти методы возвращают разные типы? (даже когда методы пытаются сделать то же самое)
Я знаю, что в примере, в котором я нарушаю принцип замещения Лискова и принцип открытого/закрытого, как лучше всего обойти это?
Спасибо за вашу помощь!
Изменить:
Для большей ясности я пытаюсь создать общий интерфейс для управления всеми возможными сообщениями в качестве базового «Сообщения», потому что я хочу избежать использования typeof в потребительском классе.
Например:
if(message is MessageWithCustomContent)
{
// do something with the contents.
}
else if(message is MessageWithCustomContent)
{
// do another thing with the contents.
}
etc...