C#中方法重载

在方法的使用过程中,重载,重写和隐藏是常用到的。下面着重介绍方法的这些使用。

1、重载

重载是方法名不变,参数列表(参数类型或个数)不同的方法体现。

注意:返回值可以相同也可以不同。当参数个数相同而参数类型不同的时候,可以考虑使用泛型,提高代码的复用性。

下面给出示例:

public class  Func
{
	//  1、显示给出默认的构造函数,这点与结构体不同,结构体的默认构造不能写,一直存在。
	public Func()
	{
		
	}
	// 2、带一个 int 类型参数的自定义构造
	public Func(int a)
	{

	}
	// 3、 与 2 不同,带一个 string 类型参数的自定义构造方法
	public Func(string a)
	{

	}
	// 4、与 2,3都不同,有两个参数
	public Func(int a,int b)
	{

	}
	// 注意下面这种情况,光是返回值不同不是方法重载,编译器也会报错,所以一定要参数列表不同
	public int GetNum()
	{
		return 0;
	}
	public void GetNum(int a)
	{
	}
}
2、 重写

重写用于子类重写父类的方法(虚方法或是抽象方法),当使用子类的实例对象赋值给父类引用的时候,调用方法会调用子类重写之后的方法。

注意:重写必须遵守的规则

(1)、使用 Override 修饰,放在 类型声明的前面,只能重写虚方法(virtual)或抽象方法(abstract);

(2)、重写的方法除了方法体可以不同外,方法名,返回值,参数列表必须相同。

下面给出示例:

public class  BaseClass
{
	public virtual int  GetNum()
	{
		return 0;
	}
}
public class class1:BaseClass
{
	// 父类的方法是虚方法时(virtual),子类可以不用重写父类的方法,重写需注意:
	// 1、返回值必须相同 2、方法名必须相同 3、参数列表必须相同
	public override int GetNum()
	{
		return 1;
	}
}
public abstract class AbstractClass
{
	// 抽象方法只能有声明,不能有实现(花括号{})
	public abstract int  GetNum();
}
public class class2:AbstractClass
{
	// 父类是抽象类,则子类必须重写父类的抽象方法,重写的规则同上
	public override int GetNum()
	{
		return 0;
	}
}

// 调用重写方法

// 子类实例化的对象赋值给父类的引用
BaseClass myClass = new class1();
// 调用方法时,会调用子类重写后的方法		
int a = myClass.GetNum(); // a = 1

// 抽象类不能实例化,可以用子类实例化的对象赋值给该类的引用
AbstractClass myClass1 = new class2();
int b = myClass1.GetNum(); // b = 0
3、隐藏

隐藏也是应用于父类和子类,当父类的方法不是虚方法或抽象方法时,子类可以隐藏父类的方法,丰富面向对象的多态性。

注意:

(1)、隐藏方法使用 new 关键字,在类型前面声明;

(2)、方法名和参数列表必须相同,返回值和方法体可以不同;

(3)、父类引用指向子类的实例对象时,调用方法会调用父类的方法,而不是子类的方法。

public class NewClass
{
	public int GetMyNum()
	{
		return 0;
	}
}
public class class3:NewClass
{
	// 子类隐藏父类的方法时,使用 new 声明,返回值可以与父类方法不同,参数列表必须相同
	public new string GetMyNum()
	{
		return "子类";
	}
}

NewClass cc = new class3();
// 当我不关心或不清楚返回值的类型时,可以使用 var 声明类型,不过必须要初始化,否则编译器推断不出类型
var c = cc.GetMyNum(); // c = 0


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值