Какова действительно цель “основного” ключевого слова в c#?

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

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

Это делает то, что я хочу, но существует "Основное" ключевое слово, которое имеет дело с базовым классом в c#... Я действительно хочу знать, когда должен использовать основное ключевое слово в моем производном классе....

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

44
задан BradleyDotNET 16 September 2014 в 22:59
поделиться

6 ответов

Ключевое слово 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
65
ответ дан 26 November 2019 в 22:04
поделиться

Ключевое слово 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;
2
ответ дан 26 November 2019 в 22:04
поделиться

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

Например:

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

     RunAdditionalProcess(); //Executes additional code
  }
1
ответ дан 26 November 2019 в 22:04
поделиться

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

Пример:

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);
    }
}
0
ответ дан 26 November 2019 в 22:04
поделиться

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

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

   base.OnRender(e);

   // just OnRender(e); will bring a StakOverFlowException
   // because it's equal to this.OnRender(e);
}
6
ответ дан 26 November 2019 в 22:04
поделиться

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

пример:

 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;
     }
 }
9
ответ дан 26 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: