したがって、私のアプリケーションのすべてのページでいくつかの共通の再利用可能なメソッドに使用される基本クラスの場合...
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
するときに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;
}
}
クラスに同じメンバーがあり、それがスーパークラスである場合、スーパークラスからメンバーを呼び出す唯一の方法-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 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は、派生クラスのメソッドをオーバーライドするが、元の機能の上に追加機能を追加する場合にのみ使用されます
例えば:
// Calling the Area base method:
public override void Foo()
{
base.Foo(); //Executes the code in the base class
RunAdditionalProcess(); //Executes additional code
}
C#の「base」キーワードの本当の目的は次のとおりです。親クラスのパラメーター化されたコンストラクターのみを呼び出したい場合、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();
}
}
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);
}
}
通常、基本クラスを使用して、基本クラスの子クラスのプロパティまたはメソッドを再利用するため、子クラスで同じプロパティとメソッドを再度繰り返す必要はありません。
ここで、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
{
}
}