当前位置:  编程技术>.net/c#/asp.net

C#学习笔记之密封类与密封方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:  1,使用关键字sealed,声明的类不能继承,声明的方法不能重写。相当于Java中的final关键字。 2,定义如下 ① 密封类的定义   代码示例: sealed class myClass  {            }            //下面的定义在编译时会报错 ...

1,使用关键字sealed,声明的类不能继承,声明的方法不能重写。相当于Java中的final关键字。

2,定义如下
① 密封类的定义
 

代码示例:
sealed class myClass 

     
    } 
     
    //下面的定义在编译时会报错 
    class myChildClass : myClass  
    { 
         

② 密封方法的定义
 

代码示例:
class myClass 

        public virtual void OnlyForMe() 
        { 
     
        } 
    } 
     
    //下面的方法OnlyForMe被定义为密封方法 
    class myChildClass : myClass  
    { 
        //非重写方法不可密封 
        public sealed override void OnlyForMe() 
        { 
     
        } 
    } 
     
    //报错 【继承成员“继承.myChildClass.OnlyForMe()”是密封的,无法进行重写】 
    class myGrandSon : myChildClass 
    { 
        public override void OnlyForMe() 
        { 
     
        } 
    } 

3,密封类一般用于不希望第三方扩展类的情况下。.NET基类库就大量使用了密封类。比如string就是一个密封类。

在C#中,为了确保其他类不可以派生于某一类,可以使用sealed关键字密封该类,对某个类使用 sealed关键字作为前缀,这样可以防止其他类继承自该类,例如:
 

代码示例:
public sealed class Square:Rectangle{}

下面的语句将导致产生错误:
 

代码示例:
///---Error:Square is sealed---
public class Rhombus:Square
{}

密封类中不能包含虚方法(Virtual)和抽象方法(abstract),因为在密封的类没有为派生类提供实现其虚方法和抽象方法的机会。

也可以使用密封方法,从而其他派生类不可以重写在当前类中提供的实现,如
 

代码示例:
public class Rectangle:Shape 

  public override double Area() 
  { 
     return this.length*this.width; 
  } 

为了防止Rectangle的派生类(如Square)修改Area()实现,可使用sealed 关键字作为该方法的前缀,如:
 

代码示例:
public class Rectangle:Shape 

   public override sealed double Area() 
   { 
       return this.length*this.width; 
   } 

现在,如果尝试重写Square类中的Area()方法,会产生错误:
 

代码示例:

public class Square:Rectangle 

    ///---Error:Area() is sealed in Rectangle class---    
    public override  double Area() 
    { 
       ///具体实现 
   } 
}

就是

这些了,C#学习笔记之C#的密封类与密封方法,希望结大家有所帮助。 


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 学习linux是用PC好还是笔记本好?
  • Oracle 10G进程体系学习笔记
  • Linux 下 Oracle 命令学习笔记
  • 版本控制ClearCase,求ClearCase的学习笔记。在线等待!分不够另开贴再加。
  • jQuery学习笔记之toArray()
  • Linux+Oracle学习笔记
  • SQL学习笔记八 索引,表连接,子查询,ROW_NUMBER
  • MySQL定时器EVENT学习笔记
  • 哪位有西陆"Java初学者"论坛版主chairyuan的学习笔记,现在那里DOWN不了,拜托哪位发一份给我,谢谢:) myjava@263.net
  • Python学习笔记_数据排序方法
  • 设计模式---学习笔记2
  • Oracle数据库基本知识学习笔记
  • jQuery学习笔记之jQuery原型属性和方法
  • JS 正则表达式的相关方法(正则学习笔记1)
  • .net/c#/asp.net iis7站长之家
  • java 学习笔记(入门篇)_java程序helloWorld
  • java 学习笔记(入门篇)_java的安装与配置
  • CSS学习笔记Padding 属性中参数的定义与使用
  • shell脚本编程之case语句学习笔记
  • SQL学习笔记一SQL基础知识
  • PHP介绍及学习网站推荐
  • 想深入学习Java应该学习哪些东西
  • 准备学习docker: docker version命令查看版本
  • 新手提问:学习c++同时也想学习unix和linux
  • HTML 学习总结及下一步学习教程推荐
  • 学习c后,学习pb,大家提点建议,谢谢哦
  • OpenStack相关学习资料搜集
  • 有最近开始学习Minix的吗?一起来学习吧
  • juqery的python实现:pyquery学习使用教程
  • 我想问问哪里有AIX下啊!~版本越新越好!~我想拿来学习学习
  • 想找共同学习Linux的新手,一起学习,共同成长


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3