c#中“base”关键字的用途是什么?
因此,对于我的应用程序的每个页面中的一些通用的可重用方法使用的基类…
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
关键字:
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); }
当您override
function但是仍然希望重写function也会发生时,您将使用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; } }
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;
在重写派生类中的方法时使用Base,但只是希望在原始function之上添加其他function
例如:
// Calling the Area base method: public override void Foo() { base.Foo(); //Executes the code in the base class RunAdditionalProcess(); //Executes additional code }
您可以使用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); } }