C# 探险之旅:第三十八节 - 类型class之Base与This关键字大冒险

嘿,勇敢的探险家们!欢迎来到C#神秘岛的第三十八站------"类型class的Base与This关键字大冒险"!今天,我们要揭开两个隐藏在类背后的超级英雄的面纱,他们可是解决继承问题和内部混乱的高手哦!准备好了吗?让我们戴上探险帽,一起出发吧!

base 关键字:召唤祖先的力量

base 关键字用于在派生类中调用基类的成员,比如构造函数、方法或属性。你可以把base看作是超级英雄召唤祖先力量的咒语,让他们能够使用家族传承下来的技能。

使用 base 调用基类构造函数

假设我们有一个SuperHero类作为所有超级英雄的基类,每个超级英雄都有一个名字和力量等级。我们可以使用base关键字来确保派生类在创建时调用基类的构造函数,从而初始化这些基本属性。

cs 复制代码
public class SuperHero
{
    public string Name { get; set; }
    public int PowerLevel { get; set; }

    // 基类构造函数
    public SuperHero(string name, int powerLevel)
    {
        Name = name;
        PowerLevel = powerLevel;
    }

    public void UsePower()
    {
        Console.WriteLine($"{Name} 使用了超能力!");
    }
}

public class FlyingHero : SuperHero
{
    // 派生类构造函数,使用 base 关键字调用基类构造函数
    public FlyingHero(string name, int powerLevel) : base(name, powerLevel)
    {
        Console.WriteLine($"{Name} 是一名会飞的超级英雄!");
    }

    // 重写 UsePower 方法,添加飞行技能
    public override void UsePower()
    {
        base.UsePower(); // 调用基类的 UsePower 方法
        Console.WriteLine($"{Name} 飞向天空!");
    }
}

在这个例子中,FlyingHero类的构造函数使用base关键字来调用SuperHero类的构造函数,确保每个FlyingHero对象都正确初始化了NamePowerLevel属性。此外,UsePower方法中也使用了base.UsePower()来调用基类的UsePower方法,然后再添加自己的飞行技能。

使用 base 调用基类方法

除了构造函数,base还可以用于调用基类中的方法或属性。这就像超级英雄在战斗中召唤祖先的力量,使用他们传下来的强大技能。

cs 复制代码
public class SuperHero
{
    public string Name { get; set; }
    public int PowerLevel { get; set; }

    public virtual void UsePower()
    {
        Console.WriteLine($"{Name} 使用了超能力!");
    }
}

public class FlyingHero : SuperHero
{
    public override void UsePower()
    {
        base.UsePower(); // 调用基类的 UsePower 方法
        Console.WriteLine($"{Name} 飞向天空!");
    }
}
this 关键字:指向前方的魔法箭

this 关键字用于引用当前对象的成员,它可以帮助你在类中区分局部变量和实例成员。你可以把this看作是一支指向当前对象的魔法箭,确保你总是调用正确的成员。

使用 this 区分局部变量和实例成员

有时候,参数名和类的属性名可能会冲突。为了区分它们,你可以使用this关键字来明确引用当前对象的成员。这就像超级英雄在战斗中用魔法箭指向前方的目标,确保他们不会误伤自己。

cs 复制代码
public class SuperHero
{
    public string Name { get; set; }
    public int PowerLevel { get; set; }

    // 构造函数中使用 this 关键字区分局部变量和实例成员
    public SuperHero(string name, int powerLevel)
    {
        this.Name = name; // 使用 this 引用实例成员
        this.PowerLevel = powerLevel;
    }

    public void SetPowerLevel(int powerLevel)
    {
        if (powerLevel > 0)
        {
            this.PowerLevel = powerLevel; // 使用 this 引用实例成员
        }
        else
        {
            Console.WriteLine("力量等级必须大于 0!");
        }
    }
}

在这个例子中,构造函数和SetPowerLevel方法中都使用了this关键字来区分局部变量namepowerLevel与类的实例成员NamePowerLevel

使用 this 作为参数传递当前对象

this关键字还可以用于将当前对象作为参数传递给其他方法或构造函数。这就像超级英雄将自己的力量传递给其他英雄,帮助他们变得更强大。

cs 复制代码
public class SuperHero
{
    public string Name { get; set; }
    public int PowerLevel { get; set; }

    public void TeamUpWith(SuperHero otherHero)
    {
        Console.WriteLine($"{this.Name} 和 {otherHero.Name} 组成了一支强大的团队!");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        SuperHero hero1 = new SuperHero { Name = "闪电侠", PowerLevel = 100 };
        SuperHero hero2 = new SuperHero { Name = "超人", PowerLevel = 200 };

        hero1.TeamUpWith(hero2); // 输出: 闪电侠 和 超人 组成了一支强大的团队!
    }
}

在这个例子中,TeamUpWith方法接受另一个SuperHero对象作为参数,并使用this关键字引用当前对象。这样,两个超级英雄可以组成一个强大的团队,共同应对挑战。

实战演练:超级英雄的日常

让我们看看如何在实际代码中使用basethis关键字。假设我们有两个超级英雄,一个是会飞的超级英雄,另一个是拥有超强力量的超级英雄。他们都可以使用基类的通用技能,但也有自己的独特技能。

cs 复制代码
FlyingHero flyingHero = new FlyingHero("闪电侠", 100);
StrongHero strongHero = new StrongHero("超人", 200);

flyingHero.UsePower();
strongHero.UsePower();

 // 使用 this 传递当前对象
flyingHero.TeamUpWith(strongHero);

public class SuperHero
{
    public string Name { get; set; }
    public int PowerLevel { get; set; }

    // 基类构造函数
    public SuperHero(string name, int powerLevel)
    {
        Name = name;
        PowerLevel = powerLevel;
    }

    public virtual void UsePower()
    {
        Console.WriteLine($"{Name} 使用了超能力!");
    }
}

public class FlyingHero : SuperHero
{
    // 派生类构造函数,使用 base 关键字调用基类构造函数
    public FlyingHero(string name, int powerLevel) : base(name, powerLevel)
    {
        Console.WriteLine($"{Name} 是一名会飞的超级英雄!");
    }

    // 重写 UsePower 方法,添加飞行技能
    public override void UsePower()
    {
        base.UsePower(); // 调用基类的 UsePower 方法
        Console.WriteLine($"{Name} 飞向天空!");
    }
}

public class StrongHero : SuperHero
{
    // 派生类构造函数,使用 base 关键字调用基类构造函数
    public StrongHero(string name, int powerLevel) : base(name, powerLevel)
    {
        Console.WriteLine($"{Name} 是一名拥有超强力量的超级英雄!");
    }

    // 重写 UsePower 方法,添加超强力量技能
    public override void UsePower()
    {
        base.UsePower(); // 调用基类的 UsePower 方法
        Console.WriteLine($"{Name} 展现了超强的力量!");
    }
}



// 扩展方法
public static class SuperHeroExtensions
{
    public static void TeamUpWith(this SuperHero hero, SuperHero otherHero)
    {
        Console.WriteLine($"{hero.Name} 和 {otherHero.Name} 组成了一支强大的团队!");
    }
}

我们运行程序后,可以看如下结果:

小结:成为代码世界的魔法师

通过今天的学习,你已经掌握了如何使用basethis关键字来调用基类成员和引用当前对象的成员。base就像是超级英雄召唤祖先力量的咒语,帮助他们在需要时使用家族传承下来的技能;而this则像是一支指向当前对象的魔法箭,确保你总是调用正确的成员。

记住,无论是继承家族的传统,还是认清自我,都是成长道路上不可或缺的一部分。在C#的世界里,basethis就是你最可靠的伙伴。

下次探险,我们又将遇到什么新奇的东西呢?敬请期待"C#探险之旅"的下一站!探险家们,再见啦!

相关推荐
奔跑吧邓邓子19 分钟前
【Python爬虫(44)】分布式爬虫:筑牢安全防线,守护数据之旅
开发语言·分布式·爬虫·python·安全
C#Thread35 分钟前
C#上位机--流程控制(IF语句)
开发语言·javascript·ecmascript
万兴丶1 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
牵牛老人1 小时前
Qt开发中出现中文乱码问题深度解析与解决方案
开发语言·qt
大脑经常闹风暴@小猿1 小时前
1.1 go环境搭建及基本使用
开发语言·后端·golang
奔跑吧邓邓子1 小时前
【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
开发语言·分布式·爬虫·python·大数据框架
Evaporator Core1 小时前
MATLAB学习之旅:数据建模与仿真应用
开发语言·学习·matlab
Zfox_2 小时前
【QT】信号与槽 & 窗口坐标
开发语言·c++·qt·qt5
张鱼小丸子2 小时前
【无标题】云原生作业六
开发语言·php
程序猿多布2 小时前
C#设计模式 学习笔记
设计模式·c#