C#通过关键字sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误 .
继承是面向对象思想中非常重要的一个部分,在各种面向对象的语言中都有实现,继承能够带给程序灵活性和可扩展性。但同时继承也存在一些问题,在设计一个会被继承的类型时,往往需要反复斟酌考虑再三,下面是常见的一些类型被继承时容易产生的问题:
· 为了让派生类型可以顺利地序列化,非叶子类需要实现恰当的序列化方法。
· 当非叶子类实现了ICloneable等接口时,意味着所有派生类被迫需要实现接口中的相同方法。
· 非叶子类的构造方法不能调用虚方法,也不应该把this指针传递给其他对象和方法。
设计一个可以被继承的类型相对复杂得多,而且更容易产生不能预计的问题。所以C#提供了一个关键字用以申明类型不可被继承:sealed。任何被sealed修饰的类将不能被继承,C#编译器将在编译阶段保证这一机制。
设计时任何没有派生需要的类型都应该被显式地添加sealed关键字,这是避免由继承带来不可预计问题的最有效办法。 |