国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#接口和抽象類使用原則

2019-11-17 04:06:31
字體:
來源:轉載
供稿:網友
接口和抽象類都可以用生強制某個類型的實例具備指定的方法,所以在使用過程中我們很容易將他們混淆。下面是我自己總結的一些區別與使用原則,與大家分享,不正之處還請大蝦們多多指正。

    1、在C#中,接口只能聲明方法或屬性的原形,而不能包含常量或者其他聲明(這與java中是不同的),而在抽象類中則是可以的。     如:
interface ISimple {
     void DoSomething();
   }
   是合法的,而
   interface ISimple {
     void DoSomething();
     const float PI=3.1415927;
   }
則是不合法的。抽象類中沒有這個限制。如:
   public abstract class SomeClass {
     public abstract void DoSomething();
     public float PI=3.1415927;
}
因此,當你需要不同的實現類中共享一些常量時,應使用抽象類代替接口。

2、接口只能用于聲明公用規則,而不能用于聲明保護性規則。如:
interface ITest {
    void Test();
}
如果企圖在ITest接口的實現類中將Test聲明成PRotected,將會產生一個編譯錯誤!如:
public class TestImpl {
    protected void Test() { }
   }
因此,當你需要在某個實現類中強制其實現某個方法,而該方法又不是公有的時,請使用抽象類代替接口。

3、抽象類可以提供某個方法的默認實現,而接口則不可以。在這種情況下,抽象類更多的是作為一個模板方法模式類,它聲明一些必須的接口,從而將一些算法的變化延遲到派生類中。

因此,如果希望某個方法具有默認實現或者使用模板方法模式時,請使用抽象類。

如:
view plaincopy to clipboardprint?
public abstract class BusinessProcess {   
    public void DoBusiness(object context) {   
       if (OnCheckingPrivilege(context)) {   
         OnProcessingBusiness(context);   
         OnLoggingBusiness(context);   
       }   
       else {   
         throw new Exception("No Privileges!");   
       }   
    }   
    protected virtual bool OnCheckingPrivilege(object context) {   
       return false;   
    }   
    protected virtual OnLogginBusiness(object context) { }   
    protected abstract void OnProcessingBusiness(object context);  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 千阳县| 滦南县| 藁城市| 南通市| 柘荣县| 文昌市| 清水县| 资阳市| 宝兴县| 武陟县| 石林| 安福县| 洪雅县| 同仁县| 怀来县| 手机| 拉萨市| 屯留县| 和硕县| 射洪县| 武陟县| 白水县| 汾西县| 会泽县| 游戏| 团风县| 波密县| 茶陵县| 隆子县| 读书| 兴海县| 吴川市| 屏山县| 淮北市| 南陵县| 临城县| 图片| 宁河县| 浠水县| 舞阳县| 乡城县|