我终于有时间教一个孩子理解并使用访问修饰符和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");
}
}
所以这里是派生类Mammal
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();
}
Tha案例非常简单 - 您看到我在Numberlegs
类中获得了受保护的属性Creature
;
在构造函数的Mammal
类中我有
base.Numberlegs = 4;
我知道这一行应该设置Numberlegs
属性但不能设置Mamal
类,但是在其基类中 - > Creature
。
我认为当我在Walk()方法中调用MAMAL
类this.Numberlegs将为0 - >但它是4;
答案 0 :(得分:2)
所以我知道这一行应该设置Numberlegs属性但不能在Mamal类中设置,而是在其基类中设置 - >生物
这是从Creature类继承的全部要点,你不需要重新声明NumberOfLegs - 所有Creature的子节点都会自动获得该属性。您没有明确声明新的NumberOfLegs,因此将使用基数。
答案 1 :(得分:1)
NumberOfLegs在baseclass中定义。 Mamal没有用new重新实现该属性。
因此base.NumberOfLegs和this.NumberOfLegs之间没有区别
答案 2 :(得分:1)
在您的情况下,使用base
和this
完全是多余的。当您需要解决命名冲突时,这些关键字非常有用。
在您的情况下,base.Numberlegs
和this.Numberlegs
表示完全相同的属性 - Creature.Numberlegs
。为什么?因为Numberlegs
中没有声明其他 Mammal
。相反,Mammal
ihnerits 来自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
}
}
答案 3 :(得分:0)
试试这个,它对我有用:
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;组; }
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 =新的哺乳动物(“你好”,20); m.Walk();
你会看到4条腿;)