基礎才是重中之重~為什么C#有顯示實現接口


回到目錄

題目很有意思,在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();

而程序運行的結果,應該是我們可以認識到的:

如圖:

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

回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM