跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp 多态
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C#多态 = '''多态'''(Polymorphism)是面向对象编程(OOP)的三大核心特性之一,另外两个是封装和继承。多态允许不同类的对象对同一消息做出响应,即同一个方法在不同的类中可以有不同的实现方式。在C#中,多态主要通过'''方法重写'''(override)和'''接口'''(interface)来实现。 == 多态的类型 == 在C#中,多态主要分为两种类型: # '''编译时多态'''(静态多态):通过方法重载(overload)和运算符重载实现。 # '''运行时多态'''(动态多态):通过方法重写(override)和接口实现。 == 方法重写(Override)与多态 == 方法重写是实现运行时多态的关键。子类可以重写父类的虚方法(virtual method)或抽象方法(abstract method),从而在运行时根据对象的实际类型调用相应的方法。 === 示例代码 === <syntaxhighlight lang="csharp"> using System; // 基类 class Animal { public virtual void MakeSound() { Console.WriteLine("动物发出声音"); } } // 派生类 class Dog : Animal { public override void MakeSound() { Console.WriteLine("汪汪汪!"); } } // 派生类 class Cat : Animal { public override void MakeSound() { Console.WriteLine("喵喵喵!"); } } class Program { static void Main() { Animal myAnimal = new Animal(); Animal myDog = new Dog(); Animal myCat = new Cat(); myAnimal.MakeSound(); // 输出:动物发出声音 myDog.MakeSound(); // 输出:汪汪汪! myCat.MakeSound(); // 输出:喵喵喵! } } </syntaxhighlight> === 输出 === <pre> 动物发出声音 汪汪汪! 喵喵喵! </pre> === 解释 === * 基类`Animal`定义了一个虚方法`MakeSound`。 * `Dog`和`Cat`类继承`Animal`并重写了`MakeSound`方法。 * 在`Main`方法中,尽管变量类型是`Animal`,但实际调用的是子类的方法,这就是运行时多态的表现。 == 接口与多态 == 接口是另一种实现多态的方式。一个类可以实现多个接口,从而表现出不同的行为。 === 示例代码 === <syntaxhighlight lang="csharp"> using System; // 接口 interface IDrawable { void Draw(); } // 实现接口的类 class Circle : IDrawable { public void Draw() { Console.WriteLine("绘制圆形"); } } // 实现接口的类 class Square : IDrawable { public void Draw() { Console.WriteLine("绘制方形"); } } class Program { static void Main() { IDrawable circle = new Circle(); IDrawable square = new Square(); circle.Draw(); // 输出:绘制圆形 square.Draw(); // 输出:绘制方形 } } </syntaxhighlight> === 输出 === <pre> 绘制圆形 绘制方形 </pre> === 解释 === * `IDrawable`接口定义了一个`Draw`方法。 * `Circle`和`Square`类实现了`IDrawable`接口,并提供了各自的`Draw`实现。 * 在`Main`方法中,通过接口变量调用`Draw`方法,实际执行的是具体类的实现。 == 实际应用场景 == 多态在软件开发中广泛应用,例如: * '''图形绘制系统''':不同的图形(圆形、矩形等)可以继承自同一个基类或实现同一个接口,但各自有不同的绘制逻辑。 * '''支付系统''':不同的支付方式(信用卡、支付宝等)可以实现同一个支付接口,但具体的支付逻辑不同。 * '''游戏开发''':不同的角色(玩家、敌人等)可以继承自同一个基类,但各自有不同的行为。 == 多态的优势 == * '''代码复用''':通过继承和接口减少重复代码。 * '''扩展性''':新增子类或实现类时,无需修改现有代码。 * '''灵活性''':运行时动态决定调用哪个方法。 == 总结 == 多态是C#面向对象编程的核心概念之一,它通过方法重写和接口实现,使得代码更加灵活和可扩展。理解多态对于编写高质量的面向对象程序至关重要。 == 参见 == * [[C#继承]] * [[C#接口]] * [[C#虚方法与抽象方法]] {{编程概念|state=autocollapse}} [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 面向对象编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:编程概念
(
编辑
)