c#入门-访问基类成员

调用基类构造器

在构建派生类前,会首先构建出完整的基类。
即便是派生类无权访问的成员,也会存在。
因此才能保证派生类能完全地当作基类来使用。

因此,在执行派生类的构造器前,首先需要先调用基类的构造器。
而如果基类没有,或是无权访问他的无参构造器
那么你就需要显式地声明派生类构造器,并指明如何调用基类构造器。

class 英雄
{
	protected int hp;
	protected int atk;
	public static int maxLevel = 18;
	public 英雄(int hp, int atk)
	{
		this.hp = hp;
		this.atk = atk;
	}
}

在这里插入图片描述
显式调用基类构造器地语法是,把调用自己构造器的语法中的this改成base。
关键字base即指代直接基类。

class 盖伦 : 英雄
{
	public 盖伦(int hp, int atk) : base(hp, atk)
	{
	}
}

访问基类的其他成员

访问基类成员需要有他的访问权限。
对于非嵌套类,需要只能访问基类protected及以上的成员。无论实例成员还是静态成员。

静态成员

静态成员不会继承下来。虽然派生类可以不带类型名直接访问基类的静态成员,
派生类自己不会另外保存一份数据
所有通过派生类访问的基类静态成员,都是确实地访问到基类的静态成员。

Console.WriteLine(英雄.maxLevel);//18
盖伦.maxLevel = 20;
Console.WriteLine(英雄.maxLevel);//20

兄弟类型的基类成员

派生类只能从自己或从自己派生类型,的实例上访问继承自基类的成员。

class 艾希 : 英雄
{
	public 艾希(int hp, int atk) : base(hp, atk)
	{
	}
}

艾希类和盖伦类都继承自英雄类。但他们不在同一条继承链上。
类型继承一旦分家,就会翻脸不认人。
虽然盖伦能访问自己身上继承来的基类成员,但不能访问兄弟类上继承来的基类成员。

并且由于多态的特性,兄弟类是可以给基类型的变量赋值的。
由于基类变量的值可能是兄弟类型,所以你不能从基类类型中访问基类成员

class 盖伦 : 英雄
{
	public 盖伦(int hp, int atk) : base(hp, atk)
	{
	}
	public void 致死打击()
	{
		英雄 a = this;
		a.hp -= 20;//即便是把自己转为基类型,也无权访问
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值