• C#密封类和密封方法--C#基础


    1、密封类

    1)不是所有的类都可以继承,不能别继承的类叫做密封类。如果一个类不希望被继承、被派生可以采用关键字sealed,下面Class2不能继承Class1

    Class1.cs:

    namespace 密封类和密封方法
    {
    //如果一个类不希望被继承、被派生可以采用关键字sealed
    public sealed class Class1
    {
    }
    }

    Class2.cs

    namespace 密封类和密封方法
    {
    class Class2:Class1//不可以继承,Class1有修饰符sealed
    {
    }
    }

    2)密封类中不能包含虚方法(virtual)和抽象方法(abstract),抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会。

    3).NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是密封类

    2、密封方法

    1)密封方法:用修饰符sealed进行标记的方法

    2)作用:使用sealed修饰可以防止派生类进一步重写该方法

    3)如果实例方法声明包含sealed修饰符,则它必须包含override修饰符

    4)不能重写密封方法,示例:(Class3不能重写Class2中的Write()方法)

    Class3.cs:

    class Class3:Class2
    {
    //public override sealed void Write() {
    // Console.WriteLine("Write()这个方法能否被重写");
    //}
    //不能重写密封方法
    }

    Class2.cs:

    public class Class2:Class1
    {
    public sealed override void Write()
    {
    Console.WriteLine("这是一个密封方法");
    }
    }

    Class1.cs:

    public class Class1 {
    public virtual void Write() {
    Console.WriteLine("这是一个未密封的方法");
    }
    }

    5)源码笔记:

    Program.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace 密封类和密封方法
    {
    //密封类中不能包含虚方法(virtual)和抽象方法(abstract),抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会
    //.NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是密封类
    //密封方法:用修饰符sealed进行标记的方法
    //作用:使用sealed修饰可以防止派生类进一步重写该方法
    //如果实例方法声明包含sealed修饰符,则它必须包含override修饰符
    //不能重写密封方法
    //public override sealed void Wite() {
    // Console.WriteLine("Write()这个方法能否被重写");
    //}

    class Program
    {
    static void Main(string[] args)
    {
    Class2 myClass2 = new Class2();
    myClass2.Write();

    }
    }
    }

    Class1.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace 密封类和密封方法
    {
    //如果一个类不希望被继承、被派生可以采用关键字sealed
    public class Class1 {
    public virtual void Write() {
    Console.WriteLine("这是一个未密封的方法");
    }
    }
    }

    Class2.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace 密封类和密封方法
    {
    public class Class2:Class1
    {
    public sealed override void Write()
    {
    Console.WriteLine("这是一个密封方法");
    }
    }
    }

    Class3.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace 密封类和密封方法
    {
    //不是所有的类都可以被继承,不能被继承的类称为
    //
    class Class3:Class2
    {
    //public override sealed void Write() {
    // Console.WriteLine("Write()这个方法能否被重写");
    //}
    //不能重写密封方法
    }
    }

  • 相关阅读:
    c++中的length,strlen;静态数据成员,静态局部变量
    c++中*的含义
    (1)引用的解释; (2)类的成员函数在类外实现的情况
    DbFunctions 作为 LINQ to Entities 查询的一部分使用时,此方法调用规范 CreateDateTime EDM 函数以创建新的 DateTime 对象。
    年视图,选择月份 ---bootstrap datepicker
    时间控件,页面刷新初始化时间控件只显示年月
    load加载层
    response 下载文件火狐浏览器文件名乱码问题
    Web Uploader
    layer是一款近年来备受青睐的web弹层组件
  • 原文地址:https://www.cnblogs.com/qikeyishu/p/7512286.html
Copyright © 2020-2023  润新知