温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#之浅谈虚方法和抽象方法的区别

发布时间:2020-07-19 13:43:51 来源:网络 阅读:1370 作者:程沐喆 栏目:编程语言

抽象类:
有时我们表达一些抽象的东西,它是一种概括,不需要它成为一种实体,所以面向对象便有了抽象类。
具体来讲:一个员工,它属于一个公司,但是公司只是一个名称,我们不需要它成为一个实体,所以公司就是一个抽象类。
何时必须声明一个类为抽象类?(面试题)
当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。
抽象类的特点:
抽象类使用abstract修饰符,并且它只能是用作基类。
抽象类不能实例化,当使用new运算符对其实例时会出现编译错误。
允许(但不要求)抽象类包含抽象成员。(非抽象类不能包括抽象成员)
抽象类不能被密封。
抽象类可以被抽象类所继承,结果仍是抽象类。

介绍一下这两种方法:

一、Virtual方法(虚方法)

 virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:

 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。

 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。

二、Abstract方法(抽象方法)

 abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。请务必将抽象方法放在抽象类中。派生类必须全部实现父类的方法。

这是我自己总结的他们的简单的区别:

抽象方法的使用:

父类:public abstract void SayHi();

子类:使用override重写

public override void SayHi()

    {
        Console.WriteLine("我的名字是: {0} ,年龄是{1},爱好有{2}",Name,Age,Hoddy);
    }

在program里:

List<Person> lists = new List<Person>();
for (int i = 1; i <=5; i++)
{
Student stu = new Student("cmz" + i.ToString(), 20 + i, "爱好无");
lists.Add(stu);
Teacher tea = new Teacher("程沐喆" + i.ToString(), 30 + i, 5 + i);
lists.Add(tea);
}

        for (int i = 0; i < lists.Count; i++)
        {

            (lists[i] as Person).SayHi();
        }

        Console.Read();

虚方法的使用:

1.在父类里写SayHi方法

private Genders gender;
public Genders Gender
{
get { return gender; }
set { gender = value; }
}

    public virtual void SayHi()
    {
        string message;
        string sex;
        switch (this.gender)
        {
            case Genders.Female:
                sex = "女士";
                break;
            case Genders.Male:
                sex = "先生";
                break;
            default:
                sex = "外星人";
                break;
        }
        message = string.Format(
            "大家好,我是 {0} {1}。我今年 {2} 岁了。!",
            this.Name, sex, this.Age
        );
        MessageBox.Show(message);
    }

2.在student里使用override重写:

override public void SayHi()
{
string message = string.Format(
"大家好,我是 {0} 同学,今年 {1} 岁了,我喜欢 {2}!",
base.Name, base.Age, this.hobby
);
MessageBox.Show(message);
}

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI