当前位置: 首页 > news >正文

天津通用网站建设方案广西seo排名

天津通用网站建设方案,广西seo排名,06628 网页制作与网站开发,中国制造网官方网站下载安装封装、继承、多态#xff0c;面向对象的三大特性#xff0c;前两项理解相对容易#xff0c;但要理解多态#xff0c;特别是深入的了解#xff0c;对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践#xff0c;封装、继承在实际工作中的应用随…封装、继承、多态面向对象的三大特性前两项理解相对容易但要理解多态特别是深入的了解对于初学者而言可能就会有一定困难了。我一直认为学习OO的最好方法就是结合实践封装、继承在实际工作中的应用随处可见但多态呢也许未必可能不经意间用到也不会把它跟“多态”这个词对应起来。在此抛砖引玉大家讨论个人能力有限不足之处还请指正。        之前看到过类似的问题如果面试时主考官要求你用一句话来描述多态尽可能的精炼你会怎么回答当然答案有很多每个人的理解和表达不尽相同但我比较趋向这样描述通过继承实现的不同对象调用相同的方法表现出不同的行为称之为多态。   例1 代码 public class Animal    {        public virtual void Eat()        {            Console.WriteLine(Animal eat);        }    }    public class Cat : Animal    {        public override void Eat()        {            Console.WriteLine(Cat eat);        }    }    public class Dog : Animal    {        public override void Eat()        {            Console.WriteLine(Dog eat);        }    }    class Tester    {        static void Main(string[] args)        {            Animal[] animals  new Animal[3];            animals[0]  new Animal();            animals[1]  new Cat();            animals[2]  new Dog();            for (int i  0; i  3; i)            {                animals[i].Eat();            }        }    }        输出如下 Animal eat... Cat eat... Dog eat...   在上面的例子中通过继承使得Animal对象数组中的不同的对象在调用Eat()方法时表现出了不同的行为。 多态的实现看起来很简单要完全理解及灵活的运用c#的多态机制也不是一件容易的事有很多需要注意的地方。   1. new的用法 先看下面的例子。 例2   代码 public class Animal    {        public virtual void Eat()        {            Console.WriteLine(Animal eat);        }    }    public class Cat : Animal    {        public new void Eat()        {            Console.WriteLine(Cat eat);        }    }    class Tester    {        static void Main(string[] args)        {            Animal a  new Animal();            a.Eat();            Animal ac  new Cat();            ac.Eat();            Cat c  new Cat();            c.Eat();        }    }   运行结果为 Animal eat... Animal eat... Cat eat...   可以看出当派生类Cat的Eat()方法使用new修饰时Cat的对象转换为Animal对象后调用的是Animal类中的Eat()方法。其实可以理解为使用new关键字后使得Cat中的Eat()方法和Animal中的Eat()方法成为毫不相关的两个方法只是它们的名字碰巧相同而已。所以 Animal类中的Eat()方法不管用还是不用virtual修饰也不管访问权限如何或者是没有都不会对Cat的Eat()方法产生什么影响只是因为使用了new关键字如果Cat类没用从Animal类继承Eat()方法编译器会输出警告。   我想这是设计者有意这么设计的因为有时候我们就是要达到这种效果。严格的说不能说通过使用new来实现多态只能说在某些特定的时候碰巧实现了多态的效果。     2.override实现多态 真正的多态使用override来实现的。回过去看前面的例1在基类Animal中将方法Eat()用virtual标记为虚拟方法再在派生类Cat和Dog中用override对Eat()修饰进行重写很简单就实现了多态。需要注意的是要对一个类中一个方法用override修饰该类必须从父类中继承了一个对应的用virtual修饰的虚拟方法否则编译器将报错。   好像讲得差不多了还有一个问题不知道你想没有。就是多层继承中又是怎样实现多态的。比如类A是基类有一个虚拟方法method()virtual修饰类B继承自类A并对method()进行重写override修饰现在类C又继承自类B是不是可以继续对method()进行重写并实现多态呢看下面的例子。   例3:   代码 public class Animal    {        public virtual void Eat()        {            Console.WriteLine(Animal eat);        }    }    public class Dog : Animal    {        public override void Eat()        {            Console.WriteLine(Dog eat);        }    }    public class WolfDog : Dog    {        public override void Eat()        {            Console.WriteLine(WolfDog eat);        }    }    class Tester    {        static void Main(string[] args)        {            Animal[] animals  new Animal[3];            animals[0]  new Animal();            animals[1]  new Dog();            animals[2]  new WolfDog();            for (int i  0; i  3; i)            {                animals[i].Eat();            }        }}        运行结果为 Animal eat... Dog eat... WolfDog eat...  在上面的例子中类Dog继承自类Animal对方法Eat()进行了重写类WolfDog又继承自Dog再一次对Eat()方法进行了重写并很好地实现了多态。不管继承了多少层都可以在子类中对父类中已经重写的方法继续进行重写即如果父类方法用override修饰如果子类继承了该方法也可以用override修饰多层继承中的多态就是这样实现的。要想终止这种重写只需重写方法时用sealed关键字进行修饰即可。     3. abstract-override实现多态 先在我们在来讨论一下用abstract修饰的抽象方法。抽象方法只是对方法进行了定义而没有实现如果一个类包含了抽象方法那么该类也必须用abstract声明为抽象类一个抽象类是不能被实例化的。对于类中的抽象方法可以再其派生类中用override进行重写如果不重写其派生类也要被声明为抽象类。看下面的例子。 例4       代码 public abstract class Animal    { public abstract void Eat();    }    public class Cat : Animal    {        public override void Eat()        {            Console.WriteLine(Cat eat);        }    }    public class Dog : Animal    {        public override void Eat()        {            Console.WriteLine(Dog eat);        }    }    public class WolfDog : Dog    {        public override void Eat()        {            Console.WriteLine(Wolfdog eat);        }    }    class Tester    {        static void Main(string[] args)        {            Animal[] animals  new Animal[3];            animals[0]  new Cat();            animals[1]  new Dog();            animals[2]  new WolfDog();            for (int i  0; i  animals.Length; i)            {                animals[i].Eat();            }        }    }     运行结果为 Cat eat... Dog eat... Wolfdog eat... 从上面可以看出通过使用abstract-override可以和virtual-override一样地实现多态包括多层继承也是一样的。不同之处在于包含虚拟方法的类可以被实例化而包含抽象方法的类不能被实例化。 以上就是我对c#中多态的一些浅薄的认识如有错误的地方欢迎批评指正转载于:https://www.cnblogs.com/Areas/archive/2012/12/05/2803784.html
http://www.ihoyoo.com/news/53177.html

相关文章:

  • 网站运营维护的基本工作山西响应式网站建设推荐
  • 湛江做网站如何做视频网站技术
  • 瑞安市住房和城乡建设局网站怎样制作网站建设规划图
  • 关于seo网站优化公司商城网站都有哪 些功能
  • 2015年做那个网站致富手机网站建设咨询
  • 网站开发如何入账外贸做网站要多久做好
  • 哪个网站可以用MC皮肤做图片一键优化什么意思
  • 郑州网站制作开发唐山做网站优化
  • 外包建网站多少钱电子商务软文写作
  • 高端网站制作哪家好装饰公司怎么做网站
  • 如何修改网站title湖北建设网站首页
  • python爬数据做网站如何设计一个网页挂到百度上
  • 谷歌提交网站入口扫码进网页怎么制作
  • 婚恋网站做翻译沙河口网站建设
  • 深圳东门步行街地铁站网站建设文书
  • 电气营销型网站方案重庆网站备案最快几天
  • 商务网站设计制作好的工具和方法网站在哪里设置域名
  • 盐城建设公司网站wordpress文章发布保存都不行
  • 保定医疗网站建设公司wordpress熊掌号
  • 江门公司建站模板婚纱礼服外贸网站
  • 滁州网站开发czesou网站建设需要注意问题
  • 网站建设设计工具学校网站建设考评办法
  • 怎么提升搜狗网站排名建设通查询中标
  • asp网站源码 怎么安装亚马逊站外推广网站
  • 哪些网站可以做招商广告语瑜伽网站模版
  • 中国工程建设造价信息网站软件属于网站开发吗
  • 湖南网站建设效果wordpress 跳转页面
  • 免费建站网站排名西安微信平台网站建设
  • 东营专业网站建设永川网站建设熊掌号
  • 零食网站模板下载常州网站制作公司排名