多态和接口(3)——设计模式(1)——方法override、CLR(Common Language Runtime 公共语言运行时)、CTS(Common Type System 公共语言系统)

1、多态就是设计模式!!!多态理解了设计模式就理解了。

2、定义坐标类,坐标类默认继承Object的ToString()方法,没有自己的特色。

3、override ToString()输出友好信息:

 public override string ToString()
        {
            return string.Format("({0},{1})",X,Y);
        }

只要用定义了这个方法的变量调用它就可以,不用关心具体的实现类是什么

 

4、不管new、隐藏,否则问题更麻烦。重载是面向过程的概念

5、多态就是调用方法的时候不用关心调用的到底是哪个子类的哪个对象。就像通过委托调用方法不用关心调用的到底是哪个函数一样

6、不同语言中类型的名字可能不一样,比如C#中的int在VB.net中是Integer,.net中定义了CTS(Common Type System 公共语言系统)也就是String、Boolean、Int32等通用类型,编译器负责把int翻译成Int32。

CLR(Common Language Runtime 公共语言运行时)

6、猫叫、狗叫的面试题

List<Pet> list = new List<Pet>();
            list.Add(new Dog());
            list.Add(new Dog());
            list.Add(new Cat());

            foreach (Pet pet in list)
            {
                //司令不用管这个宠物具体的类型,因为所有的Pet都是有“叫”方法,调用就会执行各自的叫的方法
                //if (pet is dog)
                //{
                //}
                //else if (pet is Cat)
                //{
                //}
                pet.叫();
            }

    class Program
    {
        static void Main(string[] args)
        {
            Cat c1 = new Cat();
            Dog d1 = new Dog();
            Mouse m1 = new Mouse();

            //List<Animal> list = new List<Animal>();
            //list.Add(c1);
            //list.Add(d1);
            //list.Add(m1);

            //foreach (Animal a in list)
            //{
            //    a.叫();
            //}

            Animal a = c1;
            a.叫();

            //d1.咬(c1);

            Console.ReadKey();
        }
    }

    //回答面向对象题的策略:先看有几个类
    //猫叫完了,狗叫,猫咬了一口老鼠,老鼠叫,猫如果咬狗狗也叫。

    abstract class Animal
    {
        public abstract void 叫();

        public void 咬(Animal an)
        {
            //不要认为这里an是Animal的对象,这里还是an指向的还是Cat对象
            //只是用Animal变量指向Cat对象而已。 
            an.叫();//体现了多态,
            //就像通过委托调用方法不用关心调用的到底是哪个函数一样
            //多态就是调用方法的时候不用关心调用的到底是哪个子类的那个对象
        }
    }

    class Cat : Animal
    {
        public override void 叫()
        {
            Console.WriteLine("喵");
        } 
    }

    class Dog : Animal
    {
        public override void 叫()
        {
            Console.WriteLine("汪");
        }
    }

    class Mouse : Animal
    {
        public override void 叫()
        {
            Console.WriteLine("唧唧");
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值