/// <summary> /// 从ParaInfo这个类中,让我明白到base与this的区别,很明显,base用在继承,而this可以用在串联构造函数调用 /// </summary> [Serializable] public class ParaInfo { public string Name { get; set; } public object Value { get; set; } public string Oper { get; set; } public string ParaName { get; set;} public ParameterDirection Direction { get; set; } public ParaInfo() { this.Oper = "="; this.ParaName = this.Name; this.Direction = ParameterDirection.Input; } public ParaInfo(string name, object val) : this() { this.Name = name; this.Value = val; } public ParaInfo(string name, object val, string oper) : this(name, val) { this.Oper = oper; } public ParaInfo(string name, object val, string oper,string paraName) : this(name, val,oper) { this.ParaName = paraName; } public ParaInfo(string name, object val, string oper, string paraName, ParameterDirection direction) :this(name,val,oper,paraName) { this.Direction = direction; } public ParaInfo this[int i] { get { return this[i]; } set { this[i] = value; } } }
由实例代码可见,this关键字的主要作用有三点:
1、使用this关键来消除歧义。this关键字提供了对当前类实例的访问。
2、使用this进行串联构造函数调用。当类定义了多个构造函数时,这个设计模式就会很有用。
base 访问基类的成员
this 引用当前对象
base 关键字
base 关键字从派生类中访问基类的成员,包括:
- 调用基类上已被其他方法重写的方法
- 指定创建派生类实例时应调用的基类构造函数
对基类的访问只能在构造函数、实例方法或实例属性访问器中进行。从静态方法中使用base关键字是错误的。
示例1
// keywords_base.cs
// Accessing base class members
using System;
public class Person
{
protected string ssn = "444-55-6666";
protected string name = "John L. Malgraine";
public virtual void GetInfo()
{
Console.WriteLine("Name: {0}", name);
Console.WriteLine("SSN: {0}", ssn);
}
}
class Employee : Person
{
public string id = "ABC567EFG";
public override void GetInfo()
{
// Calling the base class GetInfo method:
base.GetInfo();
Console.WriteLine("Employee ID: {0}", id);
}
}
class TestClass
{
static void Main()
{
Employee E = new Employee();
E.GetInfo();
}
}
輸出結果:
in BaseClass()
in BaseClass(int i)
this 关键字
1、this是指当前对象自己
当在一个类中要明确指出使用对象自己的变量或函数时就应该加上this关键字。
2、把this作为参数传递
当要把自己作为参数传递给别的对象时,也可以用this。如:
using System; public class A{ public A() //2.在A构造中实例B类并把自己作为参数传递进去,完了后执行3.然后4. { new B(this).Print(); } public void print() { Console.WriteLine("Hello from A!"); } } public class B { A a; public B(A a) { this.a =a; //把B类中的变量a赋值 } public void print() { a.print(); //调用a类的print()也就输出Hello from A Console.WriteLine("Hello from B!"); //接着输出Hello from B! } } class Program { public static void Main(String[] args) { A x = new A(); //1.执行A类的构造也就是2. } }
运行结果:
Hello from A!
Hello from B!
本例描述了类关系的一种“has a ”: B has a A ,即B的实例中有一个A类型的成员变量。除了“has a”,类关系最常见的还有“is a”和"like a"等。
this关键字引用为其调用方法的当前实例。静态成员函数没有this指针。this关键字可用于构造函数、实例方法和实例访问器中访问成员。
以下是this的一般用途
- 限定被相似的名称隐藏的成员
- 将对象作为参数传递到其他方法
- 声明索引器
在静态方法、静态属性访问器或字段声明的变量初始值设定项(intializer)中引用this是错误的