密封方法 密封类(sealed)


1. 密封类 即不希望类被继承,无派生类。
   密封方法 即不允许被重载的方法。

2. 密封方法 所在的类 不一定是密封类 (和抽象方法不同) ,  该类的派生类中必须原封不动的继承这个密封方法. 

    密封方法本身也是个重载方法, 即 必须 sealed 和 override 都要有.

3. 密封方法不能被重载(override), 但可以被覆盖(new).

 
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp
{
    class sealedSample
    {
        public static void Main()
        {
            A a = new A1();
            a.Output();

            a = new A2();
            a.Output();

            a = new A1_1();
            a.Output();

            a = new A1_2();
            a.Output();

            Console.Read();
        }
    }
    
    //抽象类
    public abstract class A
    {
        //抽象方法
        public abstract void Output();
    }

    //派生 实现
    public class A1 : A
    {
        //重写基类A的Output(), 并且设为 密封方法!
        public sealed override void Output()
        {
            Console.WriteLine("A1");
        }
        
        //// X 密封方法必须有override!
        //public sealed void Output()
        //{
        //    Console.WriteLine("A1");
        //}
    }

    //定义密封类 A2
    public sealed class A2 : A
    {
        public override void Output()
        {
            Console.WriteLine("A2");
        }
    }

    public class A1_1 : A1
    {
        //继承其父类(A1)的 Output()
        
    }

    public class A1_2 : A1
    {

        // X 不能重写 sealed方法, 只能 覆盖 new方法
        //public  override void Output()
        //{
        //    Console.WriteLine("A1_2");
        //}

        public new void Output()
        {
            Console.WriteLine("A1_2");
        }
    }
}

 结果:

A1
A2
A1
A1

原文地址:https://www.cnblogs.com/streetpasser/p/2793927.html