程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#統一的錯誤處理類想到的

c#統一的錯誤處理類想到的

編輯:C#入門知識

目的

做一個統一的錯誤處理類

要求

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,但是疑惑還在,找不到好的方法.於是就這樣先設計了,希望有人能給我提供好的建議回復.

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved