C#中的base理解和用法

306 阅读2分钟

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();

        }
    }

输出结果

QQ_1735026194197.png