C#类的多态

01

概述

     多态使子类(派生类)的实例可以直接赋予基类的变量(这里不需要进行强制类型转换),然后直接就可以通过这个变量调用子类(派生类)的方法。

在派生于同一个类的不同对象上执行任务时,多态是一种极为有效的技巧,使用的代码最少。可以把一组对象放到一个数组中然后调用它们的方法,在这种情况下多态的作用就体现出来了,这些对象不必是相同类型的对象。当然如果它们都继承自某个类,可以把这些子类(派生类)都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。

C#中,类的多态性是通过在子类(派生类)中重载基类的虚方法或函数成员来实现的。

02


实例

【例】 创建一个控制台应用程序,其中自定义一个MyClassl 类,该类中定义一个虚方法 Add,用来计算两个整数的和。然后自定义一个MyClass2类,该类继承于MyClassl 类,在 MyClass2类中重写MyClass1类中的虚方法。Program主程序类中,首先实例化子类MyClass2的一个对象,然后使用该对象实例化基类MyClassl的一个对象。这时,使用实例化的这两个对象都可以调用子类 MyClass2中的重写方法。

代码如下:

class MyClass1 //自定义类 
{
private int x =0://定义int 型变量,作为加数 
prvate int y=0; /定义int 型变量,作为被加数 
public int x //加数 
get
( return x ;
}
set
{
x = value;
}
}
public int Y //被加数 
{
get
{
return y;
}
set
{
y=value;
}
}


public virtual int Add()//定义一个 virtual 类型的方法,以便在子类(派生类)中重写该方法,求和
return 
{
x+Y;
}
}
class MyClass2:MyClass1 //自定义类,该类继承自 MyClass1 
{
public override int Add() //重写基类中的虚方法 
{
int x=5; 
int y=7; 
return x+y;
}
}
class Program
{
static void Main(string] args)
{
MyClass2 myclass2= new MyClass2(): //实例化 MyClass2的对象 
//使用子类(派生类)MyClass2 的对象实例化基类MyClass1 的对象 MyClass1 myclass1 =(MyClass1)myclass2;
myclass1.X =3: /1为 MyClass1 类中的属性赋值 
myclass1.Y =5; //为MyClass1类中的属性赋值 
Console.WriteLine(myclass2.AddOk //调用子类(派生类)中的方法 
Console.WriteLine(myclass1.Add(0)) /同样调用子类(派生类)中的方法 
}

运行结果为12.

说明 :蓝子类(派生类)从基类继承时,它会获得基类的所有方法、字段、属性和事件。若要

更改基类的数据和行为,有两种选择:可以使用新的派生成员替换基成员,或者可以重写虚拟的基成员。上面的实例重写了基类中的虚方法,另外,开发人员还可以使用新的派生成员替换基类的成黄,这时需要使用new关键字。如果基类定义了一个方法、字段或属性,则 new 关键字用于在子类(派生类)中创建该方法、字段或属性的新定义,new关键字放置在要替换的类成员的返回类型之前,例如,上面实例中重写基类中虚方法的代码也可以替换为下面的形式。

class MyClass2:MyClass1
{
public new int Add() //重写基类中的虚方法,返回两个int型变量相加的和 
{
int x=5; 
int y=7; 
return  x+y;
}
}

总结:

① virtual 修饰符不能与 private static、abstract 或者 override 修饰符同时使用。

② overide 修饰符不能与 new、static 或者 virtual修饰符同时使用,并且重写方法只意于重写基类中的虚方法.

@ C#中、继承、虚方法和重写方法组合在一起才能实现多态性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值