Таким образом для используемого базового класса для некоторых общих допускающих повторное использование методов на каждой странице моего приложения...
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#... Я действительно хочу знать, когда должен использовать основное ключевое слово в моем производном классе....
Любой хороший пример...
Ключевое слово 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
Ключевое слово 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;
База используется, когда вы переопределяете метод в производном классе, но просто хотите добавить дополнительные функции поверх исходная функциональность
Например:
// Calling the Area base method:
public override void Foo()
{
base.Foo(); //Executes the code in the base class
RunAdditionalProcess(); //Executes additional code
}
Вы может использовать базу для заполнения значений в конструкторе базового класса объекта.
Пример:
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);
}
}
Если у вас один и тот же член в классе и это суперкласс, единственный способ вызвать член суперкласса - использовать ключевое слово 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);
}
Вы будете использовать ключевое слово 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;
}
}