Подтвердить что ты не робот

Какова цель ключевого слова "base" в С#?

Таким образом, для используемого базового класса для некоторых методов повторного использования commom на каждой странице моего приложения...

public class BaseClass:System.Web.UI.Page
{
   public string GetRandomPasswordUsingGUID(int length)
   {
      string guidResult = System.Guid.NewGuid().ToString();
      guidResult = guidResult.Replace("-", string.Empty);
      return guidResult.Substring(0, length);
   }
}

Итак, если я хочу использовать этот метод, я бы просто сделал,

public partial class forms_age_group : BaseClass
{
      protected void Page_Load(object sender, EventArgs e)
      {
            //i would just call it like this
            string pass = GetRandomPasswordUsingGUID(10);
      }
}

Он делает то, что я хочу, но есть ключевое слово Base, которое имеет дело с базовым классом в С#... Я действительно хочу знать, когда следует использовать ключевое слово base в моем производном классе....

Любой хороший пример...

4b9b3361

Ответ 1

Ключевое слово base используется для ссылки на базовый класс при создании конструкторов цепочки или когда вы хотите получить доступ к члену (метод, свойство или что-либо) в базовом классе, который был переопределен или скрыт в текущем классе. Например,

class A {
    protected virtual void Foo() {
        Console.WriteLine("I'm A");
    }
}

class B : A {
    protected override void Foo() {
        Console.WriteLine("I'm B");
    }

    public void Bar() {
        Foo();
        base.Foo();
    }
}

С этими определениями

new B().Bar();

выводит

I'm B
I'm A

Ответ 2

Если у вас есть один и тот же член в классе и суперкласс, единственный способ вызвать участника из суперкласса - с помощью ключевого слова base:

protected override void OnRender(EventArgs e)
{
   // do something

   base.OnRender(e);

   // just OnRender(e); will bring a StakOverFlowException
   // because it equal to this.OnRender(e);
}

Ответ 3

Вы будете использовать ключевое слово base, если вы override функциональность, но все же хотите, чтобы и переопределенная функциональность также возникала.

Пример:

 public class Car
 {
     public virtual bool DetectHit() 
     { 
         detect if car bumped
         if bumped then activate airbag 
     }
 }


 public class SmartCar : Car
 {
     public override bool DetectHit()
     {
         bool isHit = base.DetectHit();

         if (isHit) { send sms and gps location to family and rescuer }

         // so the deriver of this smart car 
         // can still get the hit detection information
         return isHit; 
     }
 }


 public sealed class SafeCar : SmartCar
 {
     public override bool DetectHit()
     {
         bool isHit = base.DetectHit();

         if (isHit) { stop the engine }

         return isHit;
     }
 }

Ответ 4

Ключевое слово base используется для доступа к членам базового класса, которые были переопределены (или скрыты) членами в подклассе.

Например:

public class Foo
{
    public virtual void Baz()
    {
        Console.WriteLine("Foo.Baz");
    }
}

public class Bar : Foo
{
    public override void Baz()
    {
        Console.WriteLine("Bar.Baz");
    }

    public override void Test()
    {
        base.Baz();
        Baz();
    }
}

Вызов Bar.Test затем выводит:

Foo.Baz;
Bar.Baz;

Ответ 5

База используется, когда вы переопределяете метод в производном классе, но просто хотите добавить дополнительные функции поверх исходной функциональности

Например:

  // Calling the Area base method:
  public override void Foo() 
  {
     base.Foo(); //Executes the code in the base class

     RunAdditionalProcess(); //Executes additional code
  }

Ответ 6

Вы можете использовать base для заполнения значений в конструкторе базового класса объекта.

Пример:

public class Class1
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime Birthday { get; set; }

    public Class1(int id, string name, DateTime birthday)
    {
        ID = id;
        Name = name;
        Birthday = birthday;
    }
}

public class Class2 : Class1
{
    public string Building { get; set; }
    public int SpotNumber { get; set; }
    public Class2(string building, int spotNumber, int id, 
        string name, DateTime birthday) : base(id, name, birthday)
    {
        Building = building;
        SpotNumber = spotNumber;
    }
}

public class Class3
{
    public Class3()
    {
        Class2 c = new Class2("Main", 2, 1090, "Mike Jones", DateTime.Today);
    }
}