C#学习笔记(二):C#中的继承与多态

本文介绍了C#中子类如何调用基类构造函数以及如何重写基类虚方法。通过示例展示了Paladin类如何继承自Character类,并在构造函数中调用基类构造函数初始化属性。同时,Paladin类重写了PrintStatsInfo方法,增加了显示武器信息的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实践一:子类调用基类构造函数

说明:子类Paladin的构造函数调用了基类Character的函数,语法格式是:base(),直接传参入基类的构造函数中。

代码:

	public class Character
    {
        public String name;
        public int exp;
        public Character(String name)
        {
            this.name = name;
            this.exp = 0;
        }
        public void PrintStatsInfo()
        {
            Console.WriteLine("name:{0}-{1} exp",name,exp);
        }
    }

    public class Paladin : Character
    {
        public Paladin(String name) : base(name)
        {
            
        }
    }
    
    class MyHelloWorld
    {
        static void Main(string[] args)
        {
            Paladin knight = new Paladin("Arthur");
            knight.PrintStatsInfo();
        }

输出结果:
在这里插入图片描述

实践二:子类重写基类虚方法

说明:在之前代码的基础上定义了结构体Weapon(C#允许在结构体中定义方法,所以看起来和类很相似,但它们之间的本质区别在于结构体是值类型,而类是引用类型),然后子类Paladin中增加了一个Weapon类型的成员变量weapon,在它的构造函数中赋值weapon。再将基类Character的PrintStatsInfo成员函数改为虚方法(即增加“virtual”关键字使该方法可以在子类中被重写),最后在子类Paladin中重写该方法,调用基类方法并新增一行输出,显示Weapon的名字。

代码:

	public class Character
    {
        public String name;
        public int exp;
        public Character(String name)
        {
            this.name = name;
            this.exp = 0;
        }
        public virtual void PrintStatsInfo()
        {
            Console.WriteLine("name:{0}-{1} exp", name, exp);
        }
    }

    public struct Weapon
    {
        public String name;
        public int damage;
        public Weapon(String name, int damage)
        {
            this.name = name;
            this.damage = damage;
        }
    }

    public class Paladin : Character
    {
        public Weapon weapon;
        public Paladin(String name, Weapon weapon) : base(name)
        {
            this.weapon = weapon;
        }
        public override void PrintStatsInfo()
        {
            base.PrintStatsInfo();
            Console.WriteLine("Hail {0}, take up your {1}!", name, weapon.name);
        } 
    }
    
    class MyHelloWorld
    {
        static void Main(string[] args)
        {
            Weapon sword = new Weapon("sword",10);
            Paladin knight = new Paladin("Arthur",sword);
            knight.PrintStatsInfo();
        }
    }

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值