base用法和理解
在 C# 中,base关键字主要用于派生类中。
它有两种主要用法:
调用基类的构造函数
- 当你创建一个派生类时,派生类会继承基类的成员。如果基类有构造函数,并且你想在派生类的构造函数中调用基类的构造函数,可以使用
base。 - 例如,有一个基类
Animal,它有一个构造函数接受动物的名字作为参数Animal(string name),派生类Dog继承自Animal。在Dog的构造函数中可以这样调用基类构造函数:
class Dog : Animal
{
public Dog(string name) : base(name)
{
// 这里可以添加Dog类特有的初始化代码
}
}
- 这样就确保了在创建
Dog对象时,Animal部分的初始化(也就是用名字初始化)能够正确完成。
访问基类的成员
- 派生类可以重写(override)基类的方法。但如果在派生类中你仍然想访问被重写的基类方法,可以使用
base关键字。 - 例如,
Animal类有一个MakeSound方法,Dog类重写了这个方法,但在Dog类的MakeSound方法中,你想先执行Animal类的MakeSound方法的逻辑,就可以这样做:
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
base.MakeSound(); Console.WriteLine("Dog barks");
}
}
- 当调用
Dog对象的MakeSound方法时,会先输出基类Animal的声音相关内容,然后输出Dog特有的 “Dog barks” 内容。
以上是AI的回答 实践理解
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public Animal(string name,int age)
{
this.Name = name;
this.Age = age;
}
public virtual void RunGo()
{
Console.WriteLine(string.Format("我的名字:{0},年龄:{1}", Name, Age));
}
}
public class Dog:Animal
{
//当你创建一个派生类时,派生类会继承基类的成员。如果基类有构造函数,并且你想在派生类的构造函数中调用基类的构造函数,可以使用base。
//例如,有一个基类Animal,它有一个构造函数接受动物的名字作为参数Animal(string name),派生类Dog继承自Animal。在Dog的构造函数中可以这样调用基类构造函数:
public Dog(string name, int age)
: base(name, age)
{
this.Name = name;
this.Age = age;
}
public override void RunGo()
{
//可以先判断是不是符合条件,再执行
base.RunGo();//调用基类方法这样就不用重新写逻辑了
//这是可以写自己的逻辑
Console.WriteLine("Dog barks");//调用自己的逻辑
}
}
class Program
{
static void Main(string[] args)
{
Dog doc = new Dog("旺财",10);
doc.RunGo();
Console.WriteLine("aaaa");
Console.ReadKey();
}
}
输出结果