.NET基础加强-2-接口和实现接口的效率

            /*接口
             * 接口是一种规范,为了实现多态
             * 接口不能被实例化
             * 接口中的所有成员都不能添加任何的访问修饰符,默认的是public
             * 接口中不能包含任何的实现,光说不做,只是定义了一组未实现的成员
             * 接口只能包括方法,属性,事件,索引器(其实这些都是方法)
             * 接口与接口之间可以继承,并且可以多继承
             * 实现接口的子类必须实现该接口的所有成员
             * 当一个抽象类继承了接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract
             * 显示实现接口,只能通过接口变量来调用,应为显示实现的成员访问修饰符为private

             */


接口的成员

/// <summary>
    /// 接口,这里命名不规范,随便写的
    /// </summary>
    public interface Class1
    {

        /// <summary>
        /// 接口里的成员不能有访问修饰符
        /// 一个类只能继承一个类,类继承的单根性
        /// 但是一个类可以实现多个接口,接口的多实现
        ///
        /// 接口解决了不同类型之间的多态的问题
        /// 比如鱼和船,他们属于不同的类,没法抽象出一个父类,但是他们都可以在水里游,只是方式不同
        /// 要实现他们的多态,就可以考录使用接口,定义一个游的接口,然后让鱼和穿去实现它,从而实现船和鱼的不同游泳方式
        /// </summary>
        void SayHi();


        /// <summary>
        /// 在接口里面这表示一个未实现的属性
        /// </summary>
        string Name
        {
            get;
            set;
        }


        /// <summary>
        /// 索引器
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        string this[int index]
        {
            get;
            set;
        }
    }


    /// <summary>
    /// 实现接口
    /// </summary>
    public class Person : Class1
    {

        /// <summary>
        /// 实现方法SayHi
        /// </summary>
        public void SayHi()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 实现属性Name
        /// </summary>
        public string Name
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        /// <summary>
        /// 实现索引器
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public string this[int index]
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }
    }



一个类实现了接口并且实现了该接口的所有成员

这个类的子类也去实现该接口,比不实现该接口效率要高

/// <summary>
    /// 定义一个接口类
    /// </summary>
    public interface IPerson
    {
        void SayHi();
    }


    /// <summary>
    /// 定义一个学生类,实现接口,并且实现接口汇总所有的成员
    /// </summary>
    public class Student : IPerson
    {

        public void SayHi()
        {
            Console.WriteLine("我是个学生");
        }
    }

    /// <summary>
    /// 定义一个三号学生类,继承学生类
    /// 如果一个类Student实现一个接口IPerson并且实现了该接口所有的成员
    /// 这个类Student的子类GoodStudent由于继承了父类Student的方法,所以可以直接使用父类实现的方法(如这种写法:GoodStudent : Student)
    /// 这样写是正确的,使用是完全没有问题的
    ///
    /// 但是为了提高效率,我们可以直接让这个类的子类也实现父类已经实现的接口(如:GoodStudent : Student,IPerson)
    /// 这是后应为父类已经实现了该接口的所有成员,所以子类不必再去实现接口的成员
    /// 而且在使用多态的时候,应为查询到子类实现了接口,则可以直接转换
    /// 如果子类没有实现接口,则子类需要转换成父类,然后再转换成接口类
    /// 虽然两种方式都可以,但是子类实现接口之后会提高效率
    /// </summary>
    public class GoodStudent : Student,IPerson
    {
    
    }








猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/80862977