• C#--virtual,abstract,override,new,sealed修饰符学习


    1、参考博客  http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html

               http://www.cnblogs.com/mygood/articles/mygood_dome_c.html

    2、总结

    (1)

    virtual:使用此关键字,可以使其在派生类中被重写.

    abstract:抽象方法,由子类重写,或继续为抽象方法存在,并由其子子类实现.

    override: 重写父类方法,属性,或事件的抽象实现或虚方法.

    new:显式隐藏从父类继承的成员. 子类在重写父类方法时用在方法前用new 直接覆盖隐藏掉父类的方法

    (2)当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。 

    当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。 

    (3)C#规定只能使用下面这些限定符中的一个: 
    override  virtual      static      abstract     sealed 
    重载函数、虚拟函数、静态函数、抽象函数、密封函数(不可派生) 

    (4)

    virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。

    调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。

    默认情况下,方法是非虚拟的。不能重写非虚方法。

    public abstract class Animal
    {
        public abstract void Eat();
    
        public virtual void Sleep()
        {
            HttpContext.Current.Response.Write("动物正在睡觉!<hr/>");
        }
    }
    
    public class Horse : Animal
    {
        public override void Eat()
        {
            HttpContext.Current.Response.Write("马在吃草!<br/>");
        }
    
        public override void Sleep()
        {
            HttpContext.Current.Response.Write("马是站着睡觉!<hr/>");
        }
    }
    
    public class Cat : Animal
    {
        public override void Eat()
        {
            HttpContext.Current.Response.Write("猫在吃食!<br/>");
        }
    
        public new void Sleep()
        {
            HttpContext.Current.Response.Write("猫是趴着睡觉的!<hr/>");
        }
    }
    (4)当sealed修饰方法时,sealed将使您能够允许子类从您的类继承,并防止它们重写特定的虚方法或虚属性
    public class Cat 
    {
        public sealed void Eat()
        {
            HttpContext.Current.Response.Write("猫在吃食!<br/>");
        }
    }
    
    public class LitCat : Cat
    {
       不能重写eat方法
    }
    (5) 注意 animal an1=new Horse();
    anl.Eat() 仍然调的是子类的重写后的方法即horse的eat方法

  • 相关阅读:
    Linux系统下ZIP文件解压和压缩命令
    解析XML文件
    数组和集合之间的转换
    数据库密码到期修改密码
    Linux系统中启动jar程序
    JSONArray依赖包
    多态性
    接口----interface
    抽象类
    final关键字
  • 原文地址:https://www.cnblogs.com/taoshengyujiu/p/6807005.html
Copyright © 2020-2023  润新知