C#z中的虚方法,抽象类

1.虚方法

我在这动物类中定义了一个虚方法 Dosth

    class Animal
    {
        public int Aid;
        public string Name;
        public void SetAid(int i)
        {
            Aid = i;
        }
        public void SetName(string s)
        {
            Name = s;
        }
        public virtual string Dosth()
        {
            return null;
        }

    }

然后定义了一个猫的类和狗的类  都继承于动物类

 class Dog : Animal
    {
        public override string Dosth()
        {
            base.Dosth();
            return "汪汪汪汪汪汪汪汪";
        }
    }
  class Cat : Animal
    {
        public override string Dosth()
        {
            base.Dosth();
           return "喵喵喵喵喵喵";
        }
    }

猫和狗 虽然都是动物  都有动物编号 自己的爱称  但是叫声不一样

所以虚方法的实现状态就不一样

但是动物也可以是哑巴动物 不叫   也就代表着 虚方法可以在子类中实例化  也可以不去实例化

但是非虚方法 就必须去实现

base.Dosth()是可有可无的,这个语句表示 使用基类里的方法

不使用这行代码  那就不执行里面的内容

注意:当父类中有一个方法 在父类中没有任何意义时,必须要子类进行重写才有意义的话,这种情况就需要使用抽象方法。

原文地址:https://www.cnblogs.com/codezhao/p/10417920.html

时间: 2024-07-30 23:11:49

C#z中的虚方法,抽象类的相关文章

C#中的虚方法和抽象方法(Thirteenth Day)

今天在云和学院学了很多,我这次只能先总结一下C#中的虚方法和抽象的运用. 理论: •用virtual修饰的方法叫做虚方法 •虚方法可以在子类中通过override关键字来重写 •常见的虚方法:ToString() Equals 实操: 定义一个People的父类,包括Name,Gender,Age,和一个PeoHi 的虚方法,定义两个子类Teacher,包括Year,Salary两个属性和一个PeoHi方法:子类Student,包括StadyNum和一个PeoHi方法. 定义子类Teacher(

在基类构造器中调用虚方法需谨慎

最近,在基类的构造函数中调用虚方法时,发现了一个问题.先把问题重现如下: class Program { static void Main(string[] args) { var c = new Chinese(18); Console.ReadKey(); } } public class People { public int Age { get; protected set; } protected People() { this.Say(); } public virtual void

避免在构造函数中调用虚方法(Do not call overridable methods in constructors)

CLR中说道,不要在构造函数中调用虚方法,原因是假如被实例化的类型重写了虚方法,就会执行派生类型对虚方法的实现.但在这个时候,尚未完成对继承层次结构中所有字段的初始化.所以,调用虚方法会导致不可预测的行为.归根结底,这是由于调虚方法时,直到运行时之前,都不会选择执行该方法的实际类型. 在MSDN中,也给我我们详细的提示和范例. https://msdn.microsoft.com/en-us/library/ms182331.aspx 那我们就亲手来测试一下,新建两个类,Perople类,Chi

基类中的虚方法到底有什么作用?

只有基类的方法加上关键字virtual后才可以被override,从而实现面向对象最重要的特征--多态性,即基类可以使用派生类的方法. C#中指出:普通的方法重载:指的是类中两个以上的方法(包括隐藏的,继承而来的方法)取的名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用哪个方法.   而在派生类中重新定义此虚函数时要求的是:方法名称.返回值类型.参数表中的参数个数.类型.顺序都必须与基类中的虚函数完全一致. 简单一点说就是子类中override的方法能够覆盖积累中的

C#中的虚方法,抽象方法,抽象类以及接口

前言 众所周知,面向对象三大特点:封装.继承.多态.而今天我们将要学习的都是以多态为基础的,而什么是多态呢?举个不恰当的例子,比如你的对象,今天面对你是一副姿态,明天她给你戴绿帽子又是另一副模样(这个例子是从一个博主那看到的),你的对象还是同一个人,但是可以根据使用的对象来展现不一样的面貌,这,就是多态.简单来说:多态就是在继承的前提下,不同对象调用相同方法却表现出不同的行为.注:本次示例使用VS Code. 虚方法:virtual 虚方法存在于相对于需要实现多态的子类的父类当中,同时也是实现多

关于C#中的抽象类、抽象方法和虚方法的探究

2016年的第一篇文章,容我先喷喷新年的情怀,..........,好了,喷的差不多了. 在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的成员也是丰富多彩. 先概述: 1.抽象类 抽象类中不是所有的方法都是抽象方法,对于单纯抽象类而言,是限制类的实例化,可以没有抽象方法.甚至没有任何成员也没事.          2.抽象方法             抽象方法的目的是为了让派生类实现其方法,抽象的方法不实现,抽象方法没有方法体,没有大

接口 抽象类 虚方法 三者比较-1

接口 1.接口只提供方法规约,不提供方法体: 2.接口中的方法不能用关键字修饰: 3.接口里不能有接口和变量: 4.接口里的方法在子类中必须全部实现: 5.接口可以实现多重继承: 抽象类 1.抽象类可以从接口继承: 2.抽象类中的实体方法在子类中不可以重写,只可以被引用: 3.抽象类中的抽象方法不可以有方法体,抽象类中的抽象方法在子类中必须重写: 4.抽象类中的虚方法在子类中可以选择性的重写: 虚方法 1.可以在子类选择性的重写: 2.不重写也可被子类调用: 接口与抽象类的异同 1.抽象类的抽象

抽象类、虚方法、接口的区别

接口 1.接口只提供方法规约,不提供方法体: 2.接口中的方法不能用关键字修饰: 3.接口里不能有接口和变量: 4.接口里的方法在子类中必须全部实现: 5.接口可以实现多重继承: 抽象类 1.抽象类可以从接口继承: 2.抽象类中的实体方法在子类中不可以重写,只可以被引用: 3.抽象类中的抽象方法不可以有方法体,抽象类中的抽象方法在子类中必须重写: 4.抽象类中的虚方法在子类中可以选择性的重写: 虚方法 1.可以在子类选择性的重写: 2.不重写也可被子类调用: 接口与抽象类的异同 1.抽象类的抽象

对抽象类和虚方法的区别

抽象类定义:它的作用就是产生子类的同时给于子类一些特定的属性和方法.abstract修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用abstract修饰符以指示某个类只能是其他类的父类.标记为抽象或包含在抽象类中的成员必须通过从抽象类的子类来实现. 特性:1.抽象类不能被实例化:2.抽象类可以包含抽象方法和抽象访问器:3.不能用sealed修饰符修饰:4.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现. 总结:~抽象方法是隐式的虚方法:~只容许在抽象类中使用抽