C#程序设计知识点5-修饰符:sealed / abstract / virtual / override, abstract&virtual比较

sealed

sealed (密封):表示一个类不能被继承,不能有子类。

通常被定义为sealed都是有一些固定作用、用来完成某种标准功能的类。比如C#系统定义的String类,Int32类,Math类等。

abstract

abstract 抽象可以修饰类及类的一些成员(方法、属性、索引器)。
抽象类:没有具体对象的概念类,不能被实例化,不能用new来创建实例。必须通过被继承,创建子类实例。因此,抽象类不能用sealed修饰。

同时,抽象类的子类也可以是抽象类。

注意:

  1. 虽然抽象类不能被实例化,但是**可以有构造函数,**这些构造函数可以被子类的构造函数所调用。
  2. 抽象类的方法可以不是抽象方法;但有抽象方法的类一定得是抽象类。
  3. 抽象方法在子类中必须被实现,否则子类仍然是abstract的。
  4. abstract不能与static、private并列修饰同一个方法。
  5. 子类在实现一个abstract方法时,必须用override修饰,否则不认为实现了抽象方法,而是重新创建new了一个方法。

例如:卡车、火车、船都属于vehicle。

public abstract class Vehicle
{
	public void calcuFee(){};
	public abstract void getPrice(){};
	public abstract void getDistance(){};
} 
public class Truck : Vehicle
{
	public override void getPrice(){};
	public override void getDistance(){};
}
public class Train : Vehicle
{
	public override void getPrice(){};
	public override void getDistance(){};
}
public class Boat : Vehicle
{
	public override void getPrice(){};
	public override void getDistance(){};
}

virtual和override

  • virtual可以修饰方法、属性和索引器。 被virtual修饰的成员称为虚成员。
  • virtual & override 不能与static、private并列修饰。

virtual与abstract的比较

abstract成员隐含是virtual的,但abstract不能和virtual并列修饰。

父类定义时:

  • virtual:必须有定义内容。
  • abstract:可以只有声明。

子类调用时:

  • virtual:虚方法可以被override。
    情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
    情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。

此时,如果没有override,返回的是平均价格,而不是trunk的价格。

public class Vehicle
{
	public virtual void getPrice()
	{
		return averagePrice;
	}
}
public class Trunk : Vehicle
{
	public override void getPrice()
	{
		return trunkPrice;
	}
}
  • abstract:抽象方法必须被override。
    abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。

此时,如果没有override,会出现编译错误。

public abstract class Vehicle
{
	public abstract void getPrice();
}
public class Trunk : Vehicle
{
	public override void getPrice()
	{
		return trunkPrice;
	}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值