国产探花免费观看_亚洲丰满少妇自慰呻吟_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);  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜山县| 金门县| 嘉兴市| 辽阳县| 九寨沟县| 吕梁市| 蓝山县| 东海县| 尼勒克县| 任丘市| 疏附县| 报价| 开化县| 龙川县| 长垣县| 湛江市| 平阴县| 建阳市| 临城县| 易门县| 莱阳市| 四会市| 巫溪县| 洪洞县| 封丘县| 通城县| 石渠县| 哈巴河县| 若羌县| 呼玛县| 兴安县| 普定县| 遂川县| 洪泽县| 韩城市| 静安区| 万安县| 东阳市| 宜兴市| 介休市| 台东县|