A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我的专属 中级黑马   /  2014-3-18 10:45  /  1200 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候用base 什么时候用this?

5 个回复

倒序浏览
this一般用于指此类中的某个字段,base用于继承.
例如
  1. public Son(int age,string sex)
  2.             : base(age)
  3.         {
  4.             this.sex = sex;
  5.         }
  6.         string sex;

  7.         public string Sex
  8.         {
  9.             get { return sex; }
  10.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
我的理解:this就是(1调用当前类的实例化对象,2调用自己的构造函数),而base则是调用父类的构造函数。。
回复 使用道具 举报
this当前类的成员方法,是指本身, base是指父类(基类)的成员或者方法

base和this在C#中被归于访问关键字,就是用于实现继承机制的访问操作,来满足对对象成员的访问,从而为多态机制提供更加灵活的处理方式。
base其用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中
this其用于引用类的当前实例,也包括继承而来的方法,通常可以隐藏this
回复 使用道具 举报
本帖最后由 鬼鬼 于 2014-3-18 12:10 编辑

这样理解:
“this”就是“这个”的意思,用于在一个类中显式指代其自身的成员;
“base”就是“基础”的意思,用于指示基类中的成员。
base示例:
建立相继承的两个类:
  1.     class Parent
  2.     {
  3.         public virtual void print()
  4.         {
  5.             Console.WriteLine("父类!");
  6.         }
  7.     }
复制代码
  1.     class Child : Parent
  2.     {
  3.         public override void print()
  4.         {
  5.             Console.WriteLine("子类!");
  6.         }

  7.         public void printBase()
  8.         {
  9.             base.print();
  10.         }
  11.     }
复制代码

在Main函数中:
  1.         static void Main(string[] args)
  2.         {
  3.             Child child = new Child();
  4.             child.print();
  5.             child.printBase();
  6.             Console.ReadKey();
  7.         }
复制代码

输出结果为:
子类!
父类!

父类中print方法被子类重写,在子类中使用print()默认调用其自身方法,想要调用父类中方法就需要使用base.print()。

this示例:
建立一个类:
  1.     class ThisExample
  2.     {
  3.         private string str = "成员变量!";

  4.         public void print()
  5.         {
  6.             string str = "局部变量!";
  7.             Console.WriteLine(str);
  8.             Console.WriteLine(this.str);
  9.         }
  10.     }
复制代码

在Main函数中:
  1.         static void Main(string[] args)
  2.         {
  3.             ThisExample thisExample = new ThisExample();
  4.             thisExample.print();
  5.             Console.ReadKey();
  6.         }
复制代码

输出结果为:
局部变量!
成员变量!

ThisExample类的print()方法中定义了局部变量str,覆盖了类成员变量,所以如果想在此方法中调用类的成员变量,就要显示使用this.str指定。

以上只是this和base用法的一个例子,base的另一个典型用法就是在子类构造函数中向父类构造函数传递参数。实际使用中会遇到各种各样的情况,但是只要记着this指代类本身,base指代直接基类就可以了……

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1 很给力!

查看全部评分

回复 使用道具 举报
base 关键字用于从派生类中访问基类的成员:1、调用基类上已被其他方法重写的方法。2、指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
从静态方法中使用 base 关键字是错误的。
所访问的基类是类声明中指定的基类。 例如,如果指定 class ClassB : ClassA,则无论 ClassA 的基类如何,从 ClassB 上访问 ClassA 的成员。

this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。
常用途:1、限定被相似的名称隐藏的成员;
例如:public Employee(string name, string alias)
{
    // Use this to qualify the fields, name and alias:
    this.name = name;
    this.alias = alias;
}

2、将对象作为参数传递到其他方法;
例如:CalcTax(this);
3、声明索引器;
例如:public int this[int param]
{
    get { return array[param]; }
    set { array[param] = value; }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马