1. 程式人生 > >顯示介面和隱式介面的區別

顯示介面和隱式介面的區別

<1>隱示實現介面和類都可以訪問 顯示實現只有介面可以訪問。

<2>顯示實現益處

1:隱藏程式碼的實現功能

2:在使用介面訪問的系統中,呼叫者只能通過介面呼叫而不是底層的類來訪問,有利於安全性

 綜上:當類或結構繼承介面時,意味著該類或結構為該介面定義的所有成員提供實現。介面本身不提供類或結構能夠以繼承基類功能的方式繼承的任何功能。基類實現介面,派生類將繼承該實現

  public class CC_BASIC_CAL : ICC_BASIC_CAL
    {
        //顯示實現介面   隱士實現介面的區別:隱示實現介面和類都可以訪問 顯示實現只有介面可以訪問。

        //顯示
        //double ICC_BASIC_CAL.GetCastSpeed(double length)
        //{
        //    throw new NotImplementedException();
        //}

        //double ICC_BASIC_CAL.GetLength()
        //{
        //    throw new NotImplementedException();
        //}

        //List<string> ICC_BASIC_CAL.GetProducsList(string factoryName)
        //{
        //    throw new NotImplementedException();
        //}
//=======================================================

        //隱士
        public double GetCastSpeed(double length)
        {
            throw new NotImplementedException();
        }

        public double GetLength()
        {
            throw new NotImplementedException();
        }

        public List<string> GetProducsList(string factoryName)
        {
            throw new NotImplementedException();
        }
    }

隱示實現介面和類都可以訪問

    public class test
    {
        void test1()
        {
            CC_BASIC_CAL cc = new CC_BASIC_CAL();
            cc.GetLength();

            ICC_BASIC_CAL cc1 = new CC_BASIC_CAL();
            cc1.GetLength();

        }
    }

顯示實現只有介面可以訪問。

    public class test
    {
        void test1()
        {
            CC_BASIC_CAL cc = new CC_BASIC_CAL();
            cc.GetLength();//報錯,不能訪問


            ICC_BASIC_CAL cc1 = new CC_BASIC_CAL();
            cc1.GetLength();
        }
    }

另外:

 /*             重寫和隱藏的定義:             重寫:基類方法宣告為virtual(虛方法),派生類中使用override申明此方法的重寫.             隱藏:基類方法不做申明(預設為非虛方法),在派生類中使用new宣告此方法的隱藏。                          自己的理解:             比如父類A,有個方法標記為virtual,a(){}子類B繼承A,也宣告一個方法a(){}               如果B裡面的a()使用override,那麼訪問A的方法時實際上呼叫了B裡面宣告的方法,相當於A的方法被覆蓋了,new就不是,             訪問A的a還是A裡面定義的方法,訪問B就是B裡面定義的方法.             說白了:new是覆蓋,override是過載,“覆蓋”並不意味著“刪除”,但“過載”意味著“刪除”,             這就是“覆蓋”和“過載”的區別              隱藏(new)示例:          */