如何防止基类的方法被覆盖?

密封方法:

C#还提出了密封方法(sealedmethod) 的概念,以防止在方法所在类的派生类中对该方法的重载。对方法可以使用sealed 修饰符,这时我们称该方法是一个密封方法。

  不是类的每个成员方法都可以作为密封方法密封方法,要作为密封方法必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed 修饰符总是和override 修饰符同时使用。请看下面的例子代码:

 

 

 1 using System ;

 2 class A
 3 {
 4     public virtual void F( )
 5     {
            Console.WriteLine(
"A.F") ;
        }
 6    
        public
 virtual void G( )
 7     {    
            Console.WriteLine(
"A.G") ;
        }
 8 }

 9 class B: A
10 {
11     sealed override public void F( )
12     {
            Console.WriteLine(
"B.F") ;
         }
13 
        override
 public void G( )
14     {
             Console.WriteLine(
"B.G") ; }
15     }
16 
    class
 C: B
17 {
18     override public void G( )
19     {
            Console.WriteLine(
"C.G") ;
        }
20 }

 

类B 对基类A 中的两个虚方法均进行了重载,其中F 方法使用了sealed 修饰符,成为一个密封方法。G 方法不是密封方法,所以在B 的派生类C 中,可以重载方法G,但不能重载方法F。

但是如果我要防止A中的方法被覆盖又应该如何写呢?JAVA中有FINAL关键字。C#?
posted @ 2008-02-27 10:32 夜风777 阅读(88) 评论(0) 编辑 收藏