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

相关推荐
甘北16 分钟前
go采集注册表
开发语言·后端·golang
江木12334 分钟前
CUDA C 编程入门学习记录
c语言·开发语言·学习
不知名美食探索家1 小时前
【10】Golang实用且神奇的开发操作总结
服务器·开发语言·golang
2401_897908312 小时前
2019-Android-高级面试题总结-从java语言到AIDL使用与原理
android·java·开发语言
fancc椰2 小时前
STL—stack与queue
开发语言·c++
咔咔库奇2 小时前
【three.js】纹理贴图
开发语言·javascript·three.js·贴图·three
mikey棒棒棒2 小时前
RabbitMQ-消息可靠性以及延迟消息
java·开发语言·中间件·rabbitmq·消息可靠性·死信交换机·惰性队列
编程乐趣3 小时前
Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,不输GPT-3.5
人工智能·c#·gpt-3
MasterNeverDown3 小时前
RabbitMQ踩坑- RabbitMQ service is already present
开发语言·后端
m0_672449603 小时前
Java日志配置
java·开发语言·单元测试