基礎才是重中之重~為什麼C#有顯示實現介面

來源:互聯網
上載者:User

回到目錄

題目很有意思,在C#世界裡,有一種實現叫做“顯示實現”,它說的其實是對介面的實現方式,一般地,我們用到的實現都是隱示實現(VS裡叫做實現介面)

為什麼我們沒有用過“顯示實現介面”呢?當類只繼承一個介面時,顯式實現介面與實現介面(我習慣稱它為隱示實現)沒有區別,如果你非要找個區別,那就是顯示介面後,所有介面方法都必須是public,而“顯示實現介面“則對類來說不是public,如果你需要用到介面方法時,在聲明對象時,必須使用介面作聲明,而如果使用“隱示實現介面”,則使用類或者介面作聲明都是可以的。

例如:

顯示實現介面,只能使用介面作聲明,如果使用類作聲明,那麼介面中的方法由於在類中不是public,所以對外界是不可見的

隱示實現介面,可以使用類或者介面進行對象聲明

書規正傳,說說為什麼C#有顯示實現介面吧,其實在於JAVA來說,它並不提供顯示實現介面,而且JAVA在物件導向上還有很多無法與C#相比的地方,大家隨著自己對知識的深入,會更有體會,千萬不要聽JAVA人的一面之詞。

對於一個介面來說,它被認識是一種行為規範,例如,一個中國人與美國人的行為規範,它可能有一個相同的方法叫Compute_Wage,即“計算工資”,它在對人(people)的實現上是不同的,因為在美國,人們的福利會更好一些,而在中國,苦B的人們要交各種稅收,無語!

代碼就如下:

    /// <summary>    /// 在美國    /// </summary>    interface IUsaAccount    {        /// <summary>        /// 計算工資        /// </summary>        void Compute_Wage();    }    /// <summary>    /// 在中國    /// </summary>    interface IChinaAccount    {        /// <summary>        /// 計算工資        /// </summary>        void Compute_Wage();    }

而對於一個People來說,它無所語是中國人還是美國人,總之我要去實現你的方法,中國人實現中國的規約,美國人實現美國的規約,當然,如果你沒有指定是中

國人還是美國人,那我就是統一的規約。

代碼就如下了:

   /// <summary>    /// 苦B人類    /// </summary>    public class People : IUsaAccount, IChinaAccount    {        public People(string name, decimal salary)        {            this.Name = name;            this.Salary = salary;        }        #region Properties        public string Name { get; set; }        public decimal Salary { get; set; }        #endregion        #region 隱示實現介面        public void Compute_Wage()        {            Console.WriteLine("統一了,{0}它無論在哪個國家,工資都是{1}", Name, Salary);        }        #endregion        #region 顯示實現介面        #region IUsaAccount 成員        void IUsaAccount.Compute_Wage()        {            Console.WriteLine("在美國,{0}的工資是(原工資{1}*12%的福利){2}", Name, Salary, Salary * 1.2m);        }        #endregion        #region IChinaAccount 成員        void IChinaAccount.Compute_Wage()        {            Console.WriteLine("在中國,{0}的工資是(原工資{1}-原工資{1}*2%的個稅){2}", Name, Salary, Salary - Salary * 0.02m);        }        #endregion        #endregion    }

而這時,一個People對象,將會有三個Compute_Wage方法,它們根據你的People對象聲明不同,有三種不同的情況,看一下聲明對象的代碼:

            IUsaAccount person1 = new People("zzl", 5000);            person1.Compute_Wage();            IChinaAccount person2 = new People("zzl", 5000);            person2.Compute_Wage();            People person3 = new People("zzl", 5000);            person3.Compute_Wage();

而程式啟動並執行結果,應該是我們可以認識到的:

看完這篇文章,相信大家對“實現介面”有了全新的認識吧,在實際開發中,如果你強調“面向介面編程”,可以每次都“顯示實現介面”,這樣可以確保你的對象總要為介面進行聲明。

回到目錄

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.