zoukankan      html  css  js  c++  java
  • 基础才是重中之重~为什么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();

    而程序运行的结果,应该是我们可以认识到的:

    如图:

    看完这篇文章,相信大家对“实现接口”有了全新的认识吧,在实际开发中,如果你强调“面向接口编程”,可以每次都“显示实现接口”,这样可以确保你的对象总要为接口进行声明。

    回到目录

  • 相关阅读:
    避免PHP分页中的分页出现非整数的简化代码
    PHP restful 接口
    PHP 连接数据库
    PHP图片上传
    cookie记录用户最后登录时间
    解决 各浏览器不支持display:flex的最简单办法
    PHP 生成验证码
    php文件上传
    H5图片异步拖拽上传
    H5播放器有时获取duration的值为NaN?
  • 原文地址:https://www.cnblogs.com/lori/p/3066233.html
Copyright © 2011-2022 走看看