/// <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是错误的