我终于有时间教一个孩子理解和使用访问修饰符和oop base以及这个关键字。
我做了一个简单的我认为是世界上最简单的课程
public class Creature
{
protected string Name {get; private set; }
protected int Numberlegs { get; set; }
public Creature(string name)
{
this.Name = name;
}
protected void Walk()
{
Console.WriteLine("Walking, walking, walking ....In Creature Method");
}
}
所以这里是派生类哺乳动物
public class Mammal : Creature
{
public int Age { get; set; }
public Mammal(string namen, int age)
: base(namen)
{
this.Age = age;
base.Numberlegs = 4;
}
public void Sleep()
{
Console.WriteLine("Shhh! {0} is sleeping!", this.Name);
}
public void Walk()
{
Console.WriteLine(this.Name+ " has started walking with "+this.Numberlegs + " legs");
base.Walk();
}
这种情况是如此简单 - 你看我在Creature
类中得到了一个受保护的属性Numberlegs
;
在构造函数Mammal
类中,我有
base.Numberlegs = 4;
所以我知道这一行应该设置 Numberlegs
属性,但不是在Mamal
类中,而是在其基类中 -> Creature
中。我认为当我调用 Walk() 方法时MAMAL
类这个。数字腿将是 0 ->但它是 4;
所以我知道这一行应该设置 Numberlegs 属性,但不是在 Mamal 类中,而是在其基类中 -> 生物
这就是从 Creature 类继承的全部意义所在,你不需要重新声明 NumberOfLegs - Creature 的所有子项将自动获得该属性。 您没有明确声明新的 NumberOfLegs,因此将使用基础。
NumberOfLegs 在 baseclass 中定义。Mamal 不会用 new 重新实现该属性。
因此,基地之间没有区别。腿数和这个。腿数
在您的情况下,使用 base
和 this
是完全多余的。当您需要解决命名冲突时,这些关键字非常有用。
在您的情况下,base.Numberlegs
和 this.Numberlegs
表示完全相同的属性 — Creature.Numberlegs
。为什么?因为没有其他Numberlegs
在Mammal
中声明.相反,Mammal
从Creature
中汲取一切,这是继承的本质。
只有在以下情况下,base.Numberlegs
和this.Numberlegs
才会表示不同的属性:
两个名称相同的属性:
class Creature
{
protected int Numberlegs { get; set; }
}
class Mammal : Creature
{
// new declaration of a property Numberlegs, coincidentally named
// the same as Numberlegs in the base class
protected new int Numberlegs { get; set; } // notice the 'new' keyword
void Method()
{
base.Numberlegs; // denotes Creature.Numberlegs
this.Numberlegs; // denotes Mammal.Numberlegs
}
}
虚拟属性,在后代中覆盖:
class Creature
{
protected virtual int Numberlegs { get; set; }
}
class Mammal : Creature
{
protected override int Numberlegs { get; set; }
void Method()
{
base.Numberlegs; // denotes Creature.Numberlegs
this.Numberlegs; // denotes Mammal.Numberlegs
}
}
试试这个,它对我有用:
public class Creature
{
protected string Name { get; private set; }
protected int Numberlegs { get; set; }
public Creature(string name, int numLegs)
{
this.Name = name;
this.Numberlegs = numLegs;
}
protected void Walk()
{
Console.WriteLine("Walking, walking, walking ....In Creature Method");
}
}
和哺乳动物:
公共类 哺乳动物 : 生物 { public int age { get; set; }
public Mammal(string namen, int age)
: base(namen, 4)
{
this.Age = age;
}
public void Sleep()
{
Console.WriteLine("Shhh! {0} is sleeping!", this.Name);
}
public void Walk()
{
Console.WriteLine(this.Name + " has started walking with " + this.Numberlegs + " legs");
base.Walk();
}
}
然后在您的程序中:
哺乳动物 m = 新哺乳动物("hello", 20); m.Walk();
你会看到4条腿;)