C#的继承和多态

Double K 2014-09-16 10:47:47
如何理解,运用C#的继承和多态,能理解其含义,用的时候却不知道该怎么用了
...全文
465 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独de猫 2014-09-18
  • 打赏
  • 举报
回复
建议LZ 可以 去看看Delphi的VCL库源码,非常经典, VCL库源码 只要安装任何一个版本的Delphi都会有。
ffg_2460057139 2014-09-18
  • 打赏
  • 举报
回复
强制多态之抽象类和抽象方法的应用 public abstract class Aniaml//定义一个抽象类防止直接的实例化 { protected string petName; public Aniaml() { petName = "NoName"; } public Aniaml(string s) { petName = s; } public abstract string sound();//抽象方法 public string PetName { get { return petName; } set { petName = value; } } } public class Cat : Aniaml//定义一个子类 { public Cat() { } public Cat(string name) : base(name) { } public override string sound() { return "喵喵!"; } } public class Dog : Aniaml//定义一个子类 { public Dog() { } public Dog(string name) : base(name) { } public override string sound() { return "汪汪!"; } } protected void Page_Load(object sender, EventArgs e) { Cat a = new Cat("可爱的猫猫"); Response.Write(a.PetName + "Cat的叫声:" + a.sound() + "<br/>"); Dog d = new Dog("可爱的狗狗"); Response.Write(d.PetName+"Dog的叫声:" + d.sound()); }
於黾 2014-09-18
  • 打赏
  • 举报
回复
引用 12 楼 txfast 的回复:
其实说白了,要多态主要是为了“变化着的方向”去服务的。 如果一个程序写完了,永远都不会去改动它了,那么多态也好、设计模式也好、三层架构也好,都是毫无意义的。只要程序结构清晰,直接所有的代码堆过去就可以了。 很遗憾,写软件时,很多时候,都需要慢慢的去修改、维护去适应新的变化着的需求,那么这就需要了设计模式、多层架构去让你很好的适应变化的新要求了。
+1 编一个程序,万年不变,你用面向过程的语言也能编一个出来 但是要想团队合作,并且频繁的改动,用面向过程语言就要累死了
anabiosispe 2014-09-18
  • 打赏
  • 举报
回复
其实说白了,要多态主要是为了“变化着的方向”去服务的。 如果一个程序写完了,永远都不会去改动它了,那么多态也好、设计模式也好、三层架构也好,都是毫无意义的。只要程序结构清晰,直接所有的代码堆过去就可以了。 很遗憾,写软件时,很多时候,都需要慢慢的去修改、维护去适应新的变化着的需求,那么这就需要了设计模式、多层架构去让你很好的适应变化的新要求了。
anabiosispe 2014-09-18
  • 打赏
  • 举报
回复
多态是基于类的继承、接口的实现的 在我的理解里,因为有了类的继承,有基类和子类,有实现接口,所以才会有多态。 多态主要是为了程序的灵活性,比如一个方法要调用一个类A的fun()方法,如果这个类A并不固定,可能是多个类型。那么就可以抽象出来一个基类,把变化的内容,交给子类去做了。这样程序在这一段代码就不用怎么去维护了,将来的扩展都由子类去做。 设计模式里,有一些地方就是由多态衍生出来的一些固定方式
threenewbee 2014-09-17
  • 打赏
  • 举报
回复
要理解继承怎么用,先要搞清楚继承有什么用。 初学者不能理解继承是因为他没有这个需要,因为他一个人编写一个程序,那么这个程序所有的代码都是为他最终的那个程序服务的。 我们假设你不是一个人独立写一个程序,而是和别的开发者合作,一起实现最终的程序,你编写的代码不能随意让别的开发者修改,甚至都不必让他们拥有你的代码。如果你没有这样的经验,你必须努力设想这个场景。 一旦你想明白这一点,马上你就有这样一种需求:因为你的代码需要被调用或者调用人家的代码,而它不能被修改,所以它必须是一个黑盒,它要尽可能通用,这种通用不是指你在编写代码的时候考虑到所有可能的情形,这往往不现实,你希望的是,它能够适应未知的场景。为了达到这一点,你的代码必须留出一些“空白”,这些地方的代码由调用它的人来“填空”。 比如说,你编写了一个媒体播放器,你专注的是,它拥有美丽的外观,可以方便地组织播放列表,可以设置循环播放,等等……但是你希望它能播放的媒体文件的类型不仅限于你所听说过的那几种,甚至是程序写好的时候还没有发明的格式。这种情况下,媒体文件的读取解析的代码就不能直接在程序中写好,必须由第三方写好了,你来调用,你的程序如何调用你开发的时候甚至都不存在的代码呢? 这个时候你可以用到继承,你定义一个基类,规定播放一个文件需要调用什么方法,需要什么参数,但是你并不直接实现它。而第三方的开发者只要继承这个类,重写你定义的方法,在里面具体给出实现的代码。而你的程序通过一种机制(我们一般用反射)在运行时根据配置文件创建第三方开发者开发的这个继承类的对象,这样你的程序就可以借助继承,调用到这些代码,仿佛这些代码是一个整体。 这就是继承的作用。
smthgdin_020 2014-09-17
  • 打赏
  • 举报
回复
引用 8 楼 moonwrite 的回复:
[quote=引用 7 楼 smthgdin 的回复:] [quote=引用 2 楼 caozhy 的回复:] 这个时候你可以用到继承,你定义一个基类,规定播放一个文件需要调用什么方法,需要什么参数,但是你并不直接实现它。而第三方的开发者只要继承这个类,重写你定义的方法,在里面具体给出实现的代码。而你的程序通过一种机制(我们一般用反射)在运行时根据配置文件创建第三方开发者开发的这个继承类的对象,这样你的程序就可以借助继承,调用到这些代码,仿佛这些代码是一个整体。 这就是继承的作用。
关于继承,版主说这么多,和我的理解不大一样。[/quote] 如果你心中有多态~那么你就会明白版主说什么了~ [/quote] 这个是2个概念。你能说OO就是AOP吗?
moonwrite 2014-09-17
  • 打赏
  • 举报
回复
引用 7 楼 smthgdin 的回复:
[quote=引用 2 楼 caozhy 的回复:] 这个时候你可以用到继承,你定义一个基类,规定播放一个文件需要调用什么方法,需要什么参数,但是你并不直接实现它。而第三方的开发者只要继承这个类,重写你定义的方法,在里面具体给出实现的代码。而你的程序通过一种机制(我们一般用反射)在运行时根据配置文件创建第三方开发者开发的这个继承类的对象,这样你的程序就可以借助继承,调用到这些代码,仿佛这些代码是一个整体。 这就是继承的作用。
关于继承,版主说这么多,和我的理解不大一样。[/quote] 如果你心中有多态~那么你就会明白版主说什么了~
smthgdin_020 2014-09-17
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
要理解继承怎么用,先要搞清楚继承有什么用。 初学者不能理解继承是因为他没有这个需要,因为他一个人编写一个程序,那么这个程序所有的代码都是为他最终的那个程序服务的。 我们假设你不是一个人独立写一个程序,而是和别的开发者合作,一起实现最终的程序,你编写的代码不能随意让别的开发者修改,甚至都不必让他们拥有你的代码。如果你没有这样的经验,你必须努力设想这个场景。 一旦你想明白这一点,马上你就有这样一种需求:因为你的代码需要被调用或者调用人家的代码,而它不能被修改,所以它必须是一个黑盒,它要尽可能通用,这种通用不是指你在编写代码的时候考虑到所有可能的情形,这往往不现实,你希望的是,它能够适应未知的场景。为了达到这一点,你的代码必须留出一些“空白”,这些地方的代码由调用它的人来“填空”。 比如说,你编写了一个媒体播放器,你专注的是,它拥有美丽的外观,可以方便地组织播放列表,可以设置循环播放,等等……但是你希望它能播放的媒体文件的类型不仅限于你所听说过的那几种,甚至是程序写好的时候还没有发明的格式。这种情况下,媒体文件的读取解析的代码就不能直接在程序中写好,必须由第三方写好了,你来调用,你的程序如何调用你开发的时候甚至都不存在的代码呢? 这个时候你可以用到继承,你定义一个基类,规定播放一个文件需要调用什么方法,需要什么参数,但是你并不直接实现它。而第三方的开发者只要继承这个类,重写你定义的方法,在里面具体给出实现的代码。而你的程序通过一种机制(我们一般用反射)在运行时根据配置文件创建第三方开发者开发的这个继承类的对象,这样你的程序就可以借助继承,调用到这些代码,仿佛这些代码是一个整体。 这就是继承的作用。
关于继承,版主说这么多,和我的理解不大一样。
我叫小菜菜 2014-09-17
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
要理解继承怎么用,先要搞清楚继承有什么用。 初学者不能理解继承是因为他没有这个需要,因为他一个人编写一个程序,那么这个程序所有的代码都是为他最终的那个程序服务的。 我们假设你不是一个人独立写一个程序,而是和别的开发者合作,一起实现最终的程序,你编写的代码不能随意让别的开发者修改,甚至都不必让他们拥有你的代码。如果你没有这样的经验,你必须努力设想这个场景。 一旦你想明白这一点,马上你就有这样一种需求:因为你的代码需要被调用或者调用人家的代码,而它不能被修改,所以它必须是一个黑盒,它要尽可能通用,这种通用不是指你在编写代码的时候考虑到所有可能的情形,这往往不现实,你希望的是,它能够适应未知的场景。为了达到这一点,你的代码必须留出一些“空白”,这些地方的代码由调用它的人来“填空”。 比如说,你编写了一个媒体播放器,你专注的是,它拥有美丽的外观,可以方便地组织播放列表,可以设置循环播放,等等……但是你希望它能播放的媒体文件的类型不仅限于你所听说过的那几种,甚至是程序写好的时候还没有发明的格式。这种情况下,媒体文件的读取解析的代码就不能直接在程序中写好,必须由第三方写好了,你来调用,你的程序如何调用你开发的时候甚至都不存在的代码呢? 这个时候你可以用到继承,你定义一个基类,规定播放一个文件需要调用什么方法,需要什么参数,但是你并不直接实现它。而第三方的开发者只要继承这个类,重写你定义的方法,在里面具体给出实现的代码。而你的程序通过一种机制(我们一般用反射)在运行时根据配置文件创建第三方开发者开发的这个继承类的对象,这样你的程序就可以借助继承,调用到这些代码,仿佛这些代码是一个整体。 这就是继承的作用。
斑竹+1
於黾 2014-09-17
  • 打赏
  • 举报
回复
用的时候不知道该怎么用了 你到底想实现什么效果? 如果根本没有目的,你当然不知道该怎么用
moonwrite 2014-09-17
  • 打赏
  • 举报
回复
那是你是时候学设计模式了~少年~ 也许等你学了设计模式后~明白继承和多态的运用后~又会来问题 不知道什么时候用设计模式~ 那就要想想在学习的时候~是不是方法错了~学习的重点错了~
nongfuxu 2014-09-17
  • 打赏
  • 举报
回复
引用
你定义一个基类,规定播放一个文件需要调用什么方法,需要什么参数,但是你并不直接实现它。而第三方的开发者只要继承这个类,重写你定义的方法,在里面具体给出实现的代码。
精辟!
threenewbee 2014-09-16
  • 打赏
  • 举报
回复
C#没有“多态”这个语法,多态只是一种Style,C#的函数重载、继承函数的重写、泛型等等都体现了多态——也就是一种概念,多种实现方式。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧