| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:C# 中的密封类
取消只看楼主 加入收藏
yuwei5000
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-16
收藏
 问题点数:0 回复次数:0 
C# 中的密封类

密封类

如果我们不希望一个类被其他的类继承,我们可以把这个类定义为密封类。定义密封类需要使用 sealed 关键字。下面的代码定义了一个关于圆的密封类;

sealed class Circle

{

public int radius; //圆的半径
public double GetInfo()
{
return 2*Math.PI*radius;
}

如果我们对密封类进行继承,则编译器会抱错,下面的代码将无法通过编译;
class RedCircle : Circle
{
}
把类定义为密封时,最有可能的情形是;如果要对库,类或自己编写的其他类进行操作,则重写某些功能会导致错误;也可以因商业原因把类标记为密封类,以防止第三方以违反注册协议的方式扩展该类。把类标记为 sealed 会严重限制它的使用。 .NET 基类库提供了许多密封类,System.String 就是其中一个。
使用 sealed 修饰的类成员不能被 protected 修饰,否则编译器会报警告!
除了修饰类, sealed 关键字也可以修饰方法。如果某个方法用 sealed 修饰则表示该方法不能被子类重写。不是任何方法都可以用 sealed 修饰的,在一个类中定义的新方法是不能用 sealed 修饰的,只有在子类中重写了基类的方法才可以用 sealed 修饰。在Circle 类中,如果我们把 GetInfo 方法的定义改为“public sealed double GetInfo()”则会报“GetInfo()不是重写方法,所以无法将其密封”的错误。下面的代码演示了如何密封方法:
class A
{
public virtual void ShowInfo()
{
Console.WriteLine("基类的方法");
}
}
class B :A
{
public override sealed void ShowInfo()
{
Console.WriteLine("该方法不能再被重写了!");
}
}
因为 B 类的 ShowInfo 方法是重写了 A 类的ShowInfo 方法,所以可以使用 sealed 修饰。如果再有下面的代码,则会报编译错误:
class C :B
{
public override void ShowInfo()
{
Console.WriteLine("继续重写基类的方法!");
}
}
sealed 关键字提供了一种方式,可以确保列或方法是最终的版本,不可以再被继承或重写。
搜索更多相关主题的帖子: 关键字 public double return sealed 
2007-10-22 22:31
快速回复:C# 中的密封类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024859 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved