一、base
1、base的四种用途:
构造函数可以使用 base 关键字来调用基类的构造函数,基类的构造函数在执行构造函数块之前被调用。base 关键字可带参数使用,也可不带参数使用。构造函数的任何参数都可用作 base 的参数,或用作表达式的一部分。
在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话)。
2、继承基类使用base
隐式调用基类构造函数:如基类没有手动提供默认构造函数,base()调用出错。
显示调用基类构造函数:子类构造函数必须指明调用哪个基类构造函数。
----------------------------------------------------------------------------------------------------
using System;
namespace myBase
{
public class Test
{
public static void Main()
{
ChildContructor child =new ChildContructor();
ChildContructor child2 =new ChildContructor("注意:");
}
}
public class BaseContructor
{
public string strName="我是父类";
public BaseContructor()
{
Console.Write("基类默认构造函数");
}
public BaseContructor(string s)
{
Console.Write(s+"基类含参构造函数");
}
}
public class ChildContructor:BaseContructor
{
public ChildContructor():base()
{
Console.Write("\t\t派生类构造函数调用基类默认构造函数(基类必须提供默认构造函数)\n\n");
}
public ChildContructor(string str):base(str)
{
Console.WriteLine("\t\t"+"这是派生类构造函数调用基类含参构造函数\n\n");
}
}
}
----------------------------------------------------------------------------------------------------
using System;
public class BaseClass
{
int num;
public BaseClass()
{
Console.WriteLine("in BaseClass()");
}
public BaseClass(int i)
{
num = i;
Console.WriteLine("in BaseClass(int i)");
}
public int GetNum()
{
return num;
}
}
public class DerivedClass : BaseClass
{
// This constructor will call BaseClass.BaseClass()
public DerivedClass() : base()
{
}
// This constructor will call BaseClass.BaseClass(int i)
public DerivedClass(int i) : base(i)
{
}
static void Main()
{
DerivedClass md = new DerivedClass();
DerivedClass md1 = new DerivedClass(1);
}
}
----------------------------------------------------------------------------------------------------
二、this 关键字
1、this的四种用途
限定被相似的名称隐藏的成员,例如:
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
将对象作为参数传递到其他方法,例如:
CalcTax(this);
声明索引器,例如:
public int this [int param]
{
get { return array[param]; }
set { array[param] = value; }
}
使用 this 关键字调用同一对象中的另一构造函数
public Employee(int weeklySalary, int numberOfWeeks)
: this(weeklySalary * numberOfWeeks)
{
}
2、this注意:
构造函数可以使用 this 关键字调用同一对象中的另一构造函数。和 base 一样,this 可带参数使用也可不带参数使用,构造函数中的任何参数都可用作 this 的参数,或者用作表达式的一部分
由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。