Example #1
0
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("欢迎来到.net高级班vip课程,今天是Eleven老师为大家带来的面向对象编程");

                Polymorphism.Poly.Test();


                //Player  手机  游戏
                Console.WriteLine("你得有一个手机");
                Console.WriteLine("开机。。。");
                Console.WriteLine("联网。。。");
                Console.WriteLine("启动游戏。。。");
                Console.WriteLine("一顿操作猛如虎。。。");
                Console.WriteLine("结束游戏。。。");

                //业务不断的复杂下去
                //面向对象
                Player player = new Player();
                player.Id   = 123;
                player.Name = "K";
                player.PlayIphoneGame(new iPhone());
                //封装:数据安全;内部修改保持稳定;提供重用性;分工合作,职责分明;
                //方便构建大型复杂的系统
                //private public internal protected

                //继承:去掉重复代码;可以实现多态
                //侵入性很强的类关系
                {
                    BasePhone phone = new iPhone();
                    phone.Call();
                    //phone.GetHashCode();
                }
                {
                    BasePhone phone = new Lumia();
                    phone.Call();
                }
                //多态:相同的变量 相同的操作,但是不同的实现
                //方法的重载  接口&实现  抽象类&实现  继承

                //虚方法&抽象方法的选择
                //抽象
                {
                    BasePhone phone = new iPhone(); // new BasePhone();
                    phone.Call();
                    phone.System();                 //运行时多态

                    player.Use <iPhone>(new iPhone());

                    //phone.Video();//BasePhone没有,但是实例化的时候是有的
                    //是因为编译器的限制;实际在运行时是正确的
                    //dynamic dPhone = phone;//避开编译器的检查
                    //dPhone.Video();
                }
                //1 为什么不能调用
                //2 怎么选择接口和抽象类
                //3 为啥不直接iphone i = new phone()
                {
                    IExtend extend = new iPhone(); //new IExtend();
                    extend.Video();                //运行时多态

                    //dynamic dPhone = extend;
                    //dPhone.Call();
                    //extend.Call();
                }


                //{
                //    BasePhone phone = new Lumia();
                //    phone.Call();
                //    phone.System();
                //}

                //{
                //    IExtend extend = new Lumia();
                //    extend.Video();
                //}

                //  接口:  只能约束          多实现更灵活    can do
                //抽象类:  可以完成通用实现  只能单继承      is a

                //加减乘除四个算法  都继承抽象类 没有共同实现,但是为了表明是算法
                //List<>  Array都有这个接口IEnumerable

                //门: 材质1  猫眼3 门铃3   开门(2)  关门(2)  报警(3)
                //多个国家是多个不同的类型
                //子类都一样的,放在父类;子类都有但是不同,抽象一下;有的有有的没,那就是接口


                //接口用的更多,因为接口更简单灵活  除非有些共有的需要继承
                //IBaseService--BaseService--UserService

                //什么时候用静态方法 什么时候用普通方法
                //能普通就普通,除非这个方法确定没有什么扩展,
                //只是工具类方法  可以静态
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }