目的
做一個統一的錯誤處理類
要求
C/s
設計
既然要求System.Windows.Forms.MessageDrive和System.Web.MessageDrive
我這裡使用了系統已有的命名空間,這樣做省去了調用時單獨引用的麻煩.
既然具有相同的功能,那肯定要有個接口去約束兩個類System.IMessageDrive
又想到,雖然實現功能不同,但是2個類具有一些公共功能,於是覺得它們應該都是又一個父類派生出來.System.MessageDrive
具體設計:
接口
namespace System
{
interface IMessageDrive
{
void Exception(Exception e);
void Message(Exception e);
void Warning(Exception e);
}
enum MessageType
{
Message,
Warning,
Exception,
Notify,
News,
Push
}
}
父類
namespace System
{
public class MessageDrive
{
public virtual void Exception(Exception e)
{
}
public virtual void Message(Exception e)
{
}
public virtual void Warning(Exception e)
{
}
}
}
Cs子類
namespace System.Windows.Forms
{
public class MessageDrive:System.MessageDrive,IMessageDrive
{
public override void Exception(Exception e)
{
base.Exception(e);
MessageBox.Show(e.Message);
MessageDialog dialog = new MessageDialog(MessageType.Exception);
}
public override void Message(Exception e)
{
MessageBox.Show(e.Message);
MessageDialog dialog = new MessageDialog(MessageType.Message);
}
public override void Warning(Exception e)
{
MessageBox.Show(e.Message);
MessageDialog dialog = new MessageDialog(MessageType.Warning);
}
}
}
Bs子類
namespace System.Web
{
public class MessageDrive : System.MessageDrive,IMessageDrive
{
public override void Exception(Exception e)
{
}
public override void Message(Exception e)
{
}
public override void Warning(Exception e)
{
}
}
}
問題疑惑:
這樣寫是沒有問題的,但是有一個問題,我想這2個類應該是靜態類,至少必要的函數是靜態函數,但是這樣一來,問題就有了.base必須用在非靜態的函數和類中,於是我就開始尋求解決方法.我的目的是要調用父類裡寫好的通用方法.
方法1:直接實例化父類然後調用?
這樣一來父子關系還有意義嗎?
方法2:不使用靜態函數?
這樣對於使用人員來說,可能會產生不適,因為這個類的目的是要取代類似MessageBox.Show()之類的類函數.如果要實例化去使用顯然會造成不適.
方法3:子類重新實現父類內的功能?
這樣既不符合面向對象又不符合高內聚低耦合,而且可能編寫2個類的人員都不是一個,這個方法也不行.
我趨向於方法1,但是疑惑還在,找不到好的方法.於是就這樣先設計了,希望有人能給我提供好的建議回復.