201803280002总结:
1.Sealed:密封的意思;由它修饰的类或方法将不能被继承或重写;
2.类中被Sealed修饰时,可防止被其它类继承。密封类不能同时又是抽象类,因为抽象类总是希望被继承的;
3.密封方法:防止在方法所在类的派生类中对该方法的重载。
4.不是类的每个成员方法都可以作为密封方法,要作为密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。所在方法的声明中,Sealed修饰符
总是和override修饰符同时使用。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace _20180328_0004_1 { class Sealed { static void Main(string[] args) { Console.WriteLine("请输入电脑CPU的名称:"); string c=Console.ReadLine(); Computer cp = new Computer(c); //创建电脑对象 Console.WriteLine("\n{0}所采用的CPU为{1}",cp.name,cp.cpu); Phone no = new Phone(); //创建手机对象 no.display(); //调用重写后的密封方法display(); Console.ReadKey(); } } class Product { internal string name; internal virtual void display() //虚方法 { Console.WriteLine("这是产品类的虚方法"); } } sealed class Computer : Product //声明电脑类,继承于Product类 { internal string cpu; internal Computer(string c) { this.cpu = c; this.name = "电脑"; } } //声明本来将导致错误,因为Computer类为密封类,无法被继承; //class NoteBook : Computer //{
//} class Phone:Product //声明手机类,继承于Product类 { internal sealed override void display() //重新父类中的虚方法,并将此方法定为Sealed,不是任意一种方法都可以定为Sealed的, { //sealed经常且必须与override同时使用; Console.WriteLine("\n 这是手机类的方法"); } } class Phone3G :Phone //如何在Phone类中的重写的方法中没有添加Sealed,则继承Phone时,可以继续重写。 { //但若在Phone类中添加了Sealed后,并且Phone3G继承Phone时就不能直接重写display()方法了; //声明此方法将导致错误,由于display方法在其父类Phone中为密封方法,所以无法再重写。 //internal override void display() //{ //} } }