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#探险之旅"的下一站!探险家们,再见啦!

相关推荐
Y.O.U..2 分钟前
今日八股——C++
开发语言·c++·面试
weixin_3077791311 分钟前
使用C#实现从Hive的CREATE TABLE语句中提取分区字段名和数据类型
开发语言·数据仓库·hive·c#
Xiaok101819 分钟前
解决 Hugging Face SentenceTransformer 下载失败的完整指南:ProxyError、SSLError与手动下载方案
开发语言·神经网络·php
绿草在线21 分钟前
Mock.js虚拟接口
开发语言·javascript·ecmascript
go_bai31 分钟前
Linux环境基础开发工具——(2)vim
linux·开发语言·经验分享·笔记·vim·学习方法
小郝 小郝33 分钟前
【C语言】strstr查找字符串函数
c语言·开发语言
yinhezhanshen38 分钟前
理解rust里面的copy和clone
开发语言·后端·rust
Jtti1 小时前
PHP在Debian环境上的并发处理能力如何
开发语言·debian·php
时光追逐者1 小时前
在 Blazor 中使用 Chart.js 快速创建数据可视化图表
开发语言·javascript·信息可视化·c#·.net·blazor
独好紫罗兰1 小时前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法