通过实例,理解base和this关键字

  

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值