sealed密封类的使用

sealed 密封类,为了避免滥用继承
形式:

 public sealed class myClass2 

密封类不能作为基类被别的元素继承,但其可以继承别的类或接口
密封类中不能声明受保护成员或虚成员,因为受保护成员只能在派生类中访问,而虚成员只能在派生类中重写方法
密封类的不可继承性,是因为不能声明为抽象类,即sealed前不能用abstract修饰。
使用密封类的情况:
1.如果是静态类
2.类中包含敏感信息的
3.类继承多个虚成员,不如整个密封
4.类要求是一个提供反射快速搜索,密封类搜索好

密封方法

并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现,并提供具体的实现。
所以,声明密封方法时,sealed修饰符总是和override修饰符同时使用

public class myclass
{
    public virtual void method()
    {
        Console.WriteLine("基类中的虚方法");
    }
}
public sealed class myclass2:myclass
{
    public sealed  overrider void method()
    {
        base.method();
        Console.WriteLine("重写后的方法");
    }
}

说明:base.method();表示调用基类中的method方法,base关键字主要是为派生类调用基类成员提供一种简写形式

密封类和密封方法
密封类除了不能继承外和其他非密封类差不多。而密封方法则必须通过重写基类中的虚方法来实现。
例子:

namespace Test
{
    public class myClass1
    {
        /// <summary>
        /// 虚方法,用来显示信息
        /// </summary>
        public virtual void ShowInfo()
        {
        }
    }
    public sealed class myClass2 : myClass1         //密封类,继承自myClass1
    {
        private string id = "";                     //string类型变量,用来记录编号
        private string name = "";                   //string类型变量,用来记录名称
        /// <summary>
        /// 编号属性
        /// </summary>
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        /// <summary>
        /// 名称属性
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// <summary>
        /// 密封并重写基类中的ShowInfo方法
        /// </summary>
        public sealed override void ShowInfo()
        {
            Console.WriteLine(ID + " " + Name);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            myClass2 myclass2 = new myClass2();     //实例化密封类对象
            myclass2.ID = "BH0001";             //为密封类中的编号属性赋值
            myclass2.Name = "TM";               //为密封类中的名称属性赋值
            myclass2.ShowInfo();                    //调用密封类中的密封方法
        }
    }

}

运行结果BH0001 TM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值