Какова цель ключевого слова base в c #? - PullRequest
43 голосов
/ 15 апреля 2010

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

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", которое имеет дело с базовым классом в c # ... Я действительно хочу знать, когда следует использовать базовое ключевое слово в моем производном классе ....

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

Ответы [ 8 ]

61 голосов
/ 15 апреля 2010

Ключевое слово 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
7 голосов
/ 15 апреля 2010

Вы будете использовать ключевое слово 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;
     }
 }
6 голосов
/ 15 апреля 2010

Если у вас есть один и тот же член в классе и это суперкласс, единственный способ вызвать члена из суперкласса - использовать ключевое слово 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);
}
2 голосов
/ 15 апреля 2010

Ключевое слово 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;
1 голос
/ 15 апреля 2010

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

Например:

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

     RunAdditionalProcess(); //Executes additional code
  }
0 голосов
/ 27 сентября 2018

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

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

Пример

public override void ParentMethod() 
  {
     base.ParentMethod(); //call the parent method

     //Next code.
  }

2) Пример

class child: parent
{
    public child() : base(3, 4) //if you have parameterised constructor in base class
    {

    }
}
0 голосов
/ 27 сентября 2018

Реальное назначение ключевого слова «base» в c # заключается в следующем: предположим, что вы хотите вызвать только параметризованный конструктор родительского класса - тогда вы можете использовать base и передать параметры, см. Пример ниже ... *

Пример -

 class Clsparent
{
    public Clsparent()
    {
        Console.WriteLine("This is Clsparent class constructor");
    }
    public Clsparent(int a, int b)
    {
        Console.WriteLine("a value is=" + a + " , b value is=" + b);
    }
}
class Clschild : Clsparent
{
    public Clschild() : base(3, 4)
    {
        Console.WriteLine("This is Clschild class constructor");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Clschild objclschild = new Clschild();
        Console.Read();
    }
}
0 голосов
/ 15 апреля 2010

Вы можете использовать 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);
    }
}
...