大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
派生类只能从一个基类继承,不能有多个基类。

当派生类重新定义基类函数时,使用new关键字来hide基类中的非虚函数,使用override关键字override基类中的虚函数。
using System;

class TestCS
{
    
class Base
    
{
        
public void NonVirtualFun()
        
{
            Console.WriteLine(
"Base.NonVirtualFun");
        }


        
virtual public void VirtualFun()
        
{
            Console.WriteLine(
"Base.VirtualFun");
        }

    }


    
class Derived: Base
    
{
        
//使用new关键字,hide
        new public void NonVirtualFun()
        
{
            Console.WriteLine(
"Derived.NonVirtualFun");
        }


        
//使用override关键字,override
        override public void VirtualFun()
        
{
            Console.WriteLine(
"Derived.VirtualFun");

            
//使用base关键字来引用父类成员
            base.VirtualFun();
        }

    }


    
static void Main()
    
{
        Base d 
= new Derived();
        d.NonVirtualFun();      
//base.NonVirtualFun
        d.VirtualFun();         //Derived.VirtualFun
    }

}


C#中没有纯虚函数,抽象类前用abstract关键字声明。
抽象方法前也用abstract关键字声明,不能提供实现,非abstract派生类必须实现继承而来的abstract方法,派生类中该方法必须用override关键字。
abstract类不能用new实例化。
using System;

class TestCS
{
    
//抽象类用abstract关键字声明
    abstract class A
    
{
        
//抽象方法用abstract关键字声明,不能提供实现,派生类必须override
        abstract public void AbFun();
        
public void NonAbFun()
        
{
            Console.WriteLine(
"NonAbFun");
        }

    }


    
class B: A
    
{
        
//必须使用override关键字来override基类的abstract方法
        override public void AbFun()
        
{
            Console.WriteLine(
"AbFun");
        }

    }


    
static void Main()
    
{
        A b 
= new B();
        b.AbFun();
        b.NonAbFun();
    }

}


用sealed关键字修饰密封类,密封类不能被继承。
用sealed关键字修饰密封方法,密封方法必须是override方法。
using System;

class TestCS
{
    
//密封类用sealed关键字声明
    sealed class A
    
{
        
    }


    
//error密封类不能被继承
    class B: A
    
{
       
    }


    
class C
    
{
        
//virtual in Base
        virtual public void Fun() { }
    }


    
class D : C
    
{
        
//sealed只能用来修饰override的方法
        sealed override public void Fun() { }
    }


        class E : D

         {

            //error,密封方法不能被override

            //override public void Fun() { }

            //OK, 密封方法可以被new

            new public void Fun() { }

         }


    
static void Main()
    
{
        
    }

}
posted on 2009-06-15 08:48 大胖 阅读(134) 评论(0)  编辑 收藏 引用 所属分类: C#

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理