Какова цель ключевого слова "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 в моем производном классе....
Любой хороший пример...
Ответы
Ответ 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);
}
}