【意义】

this:指当前类,this调用当前类的属性,方法,包括构造函数的方法,继承本类的构造函数

base:指当前类的父类,可调用父类的非私有属性,方法,继承父类的构造函数括号里的参数

【用处】

一:this的用处

1.限定被相似的名称隐藏的成员,方法或函数(多数用在构造函数中)

    class Person
{
private string name;
public Person(string name)
{
this.name = name;
}
}

由于this.name中的name和入参name的名称一样,即被入参隐藏了,所以要用this限定name是本类的属性

2.将自己this对象作为参数传递给其它方法

    class Teacher
{
public void tshow()
{
Console.WriteLine("我是老师!");
Console.WriteLine(this);//显示的是本类的类名
}
}

3.声明索引器

       private int _index;
public int this[int index]
{
get { return _index; }
set { _index = index; }
}

二:base的用处(base实现了多态)
1.在子类中通过base调用父类的构造函数,即在子类初始化时和父类进行通信。

    class Program
{
static void Main(string[] args)
{
Person p = new Person("小李");
p.show();
Teacher t = new Teacher("小刘",18);
t.tshow(); Console.Read();
}
}
class Person
{
protected string name;
public Person(string name)
{
this.name = name;
}
public void show()
{
Console.WriteLine("我属于人类!");
}
}
class Teacher:Person
{ public Teacher(string name,int age)
: base(name)
{
this.Age = age;
}
private int _age;
public int Age
{
get { return _age; } //读
set { _age = value; } //写
}
public void tshow()
{
Console.WriteLine("我是学生{0}{1}!",name,Age);
}
}

2.调用基类上已被其它方法重写的方法

    class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.show();
Teacher t = new Teacher();
t.show();
Console.Read();
}
}
class Person
{
public virtual void show()
{
Console.WriteLine("我属于人类");
}
}
class Teacher:Person
{
public override void show()
{
base.show();
Console.WriteLine("我是老师");
}
}

3.调用基类的构造函数

    class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.show();
Teacher t = new Teacher();
t.tshow();
Console.Read();
}
} class Person
{
public void show()
{
Console.WriteLine("我属于人类");
}
}
class Teacher:Person
{
public void tshow()
{
base.show();
Console.WriteLine("我是老师");
}
}

【注】

在多层继承中:

1>有重载,base指向直接继承的父类

2>无重载,base可指向任意上级父类

总结】
不能在静态方法中引用this和base,因为当类第一次被加载的时候,静态成员已经被加载到静态存储区,此时类的对象还有可能能没有创建,而this和base访问的都是类的实例,也就是对象,而静态成员只能由类访问,不能由对象访问,所以静态方法中不能调用类成员字段。

最新文章

  1. 如何编写高效的jQuery代码
  2. tomcat管理端的页面安全措施
  3. C语言中system()函数的用法总结(转)
  4. c++之路进阶——hdu3507(Print Article)
  5. Windows Azure 实操 —— 迁移本地SharePoint服务器到Azure
  6. C和C++头文件的不同
  7. ♫【模式】Curry化
  8. nodejs应用mysql(纯属翻译)
  9. MVC中Controller里写alert的问题
  10. crawler_基础之_java.net.HttpURLConnection 访问网络资源
  11. Myeclipse创建新项目
  12. map用法
  13. 解决win环境下访问本机虚拟机中centos7 ftp服务器的问题
  14. Vue+iview实现添加删除类
  15. delphi Timage 加上滚动条方法
  16. HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
  17. Java Swing实战(二)下拉菜单组件JComboBox及其事件监听
  18. 浅析OpenGL光照
  19. Sublime Text 3如何编译运行c++程序
  20. STM32平台SD卡的FatFS文件系统开发

热门文章

  1. c++ 的学习 第二集函数的重载之3 -利用IDA分析bebug里面
  2. P4774-[NOI2018]屠龙勇士【EXCRT】
  3. Hive语法及其进阶(一)
  4. 【C++ Primer Plus】编程练习答案——第8章
  5. 使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查
  6. SpringBoot之网站的登陆注册逻辑
  7. 那些我用Windows时必备的软件
  8. nginx访问权限问题
  9. keeplived高可用配置
  10. javascript-jquery对象的css处理