关键字this有两种基本的用法,一是用来进行this访问,二是在声明构造函数时指定需要先执行的构造函数。

一、this访问

在类的实例构造函数和实例函数成员中,关键字this表示当前的类实例或者对象的引用。this不能用在静态构造函数和静态函数成员中,也不能在其他地方使用。

当在实例构造函数或方法内使用了与字段名相同的变量名或参数名时,可以使用this来区别字段和变量或者参数。下面的代码演示了this的用法。

public class Dog

{

public string name;

public int age;

public Dog()

{

}

public Dog(string name)       // 在这个函数内,name是指传入的参数name

{

this.name = name;          // this.name表示字段name

}

public Dog(string name, int age) // 在这个函数内,name是指传入的参数name

{                     // age是指传入的参数age

this.name = name;           // this.name表示字段name

this.age = age;          // this.age表示字段age

// 非静态成员可以在构造函数或非静态方法中使用this.来调用或访问,也可以直接打变量的名字。因此这一句等效于name = name;
      //但是这时你会发现的变量name与传入的参数name同名,这里会造成二定义,所以要加个this.表示等号左边的name是当前类自己的变量。

}

}

实际上,this被定义为一个常量,因此,虽然在类的实例构造函数和实例函数成员中,this可以用于引用该函数成员调用所涉及的实例,但是不能对this本身赋值或者改变this的值。比如,this++,--this之类的操作都是非法的。

二、this用于构造函数声明
可以使用如下的形式来声明实例构造函数:

<访问修饰符> 类名 (形式参数表) : this(实际参数表)

{
   //语句块
}

其中的this表示该类本身所声明的、形式参数表与『实际参数表』最匹配的另一个实例构造函数,这个构造函数会在执行正在声明的构造函数之前执行。

比如:

// ThisAndConstructor.cs

// 关键字this用于声明构造函数

using System;

class A

{

public A(int n)

{

Console.WriteLine("A.A(int n)");

}

public A(string s, int n) : this(0)

{

Console.WriteLine("A.A(string s, int n)");

}

}

class Test

{

static void Main()

{

A a = new A("A Class", 1);

}

}

将输出:

A.A(int n)

A.A(string s, int n)

这说明,执行构造函数A(string s, int n)之前先执行了构造函数A(int n)。

C#中this关键字-调用本类成员相关推荐

  1. 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )

    文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...

  2. Java 小白 设计电池类,在电池类的构造方法中声明一节5号电池的电压为1.5伏,使用this关键字调用电池类中的构造方法,实现电压为9伏的叠层电池,

    public class voltagecake {double voltage;public voltagecake (double voltage){this.voltage = voltage; ...

  3. 为什么Android教程中的大多数字段(类成员)都以`m`开头?

    我知道骆驼案例规则,但我对这个规则感到困惑. 它代表什么? 我是一名PHP开发人员. "我们"使用变量的第一个字母作为类型的指示,如"b"表示布尔值," ...

  4. Java中super关键字调用构造方法小结

    1.子类中所有的构造方法默认都会访问父类中的无参构造方法. 2.子类会继承父类中的数据,还可能回去使用父类的数据.所以子类初始化之前,会先完成父类的初始化,即先访问父类中的无参构造方法. 3.在子类中 ...

  5. new关键字对类成员的阻断

    昨天终于对new关键字对类成员的阻断作用有了比较清晰的认识,"对类成员的阻断"是王涛大哥在其作品<你必须知道的.NET>的说法,昨天在园里看到一位前辈戏称之为" ...

  6. C++类和对象(中)(6个默认成员函数)

    目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 1. ==函数名==与==类名==相同. 2. 无返回值. 3. ==对象实例化时==编译器自动调用对应的构造函数. 4. ...

  7. 【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )

    文章目录 前言 一.Groovy 类中调用 Groovy 脚本 1.参考 Script#evaluate 方法分析 Groovy 类中调用 Groovy 脚本 2.创建 Binding 对象并设置 a ...

  8. 【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 参考 Script#evaluate 方法 | 创建 Binding 对象并设置 args 参数 )

    文章目录 一.Groovy 类中调用 Groovy 脚本 1.参考 Script#evaluate 方法分析 Groovy 类中调用 Groovy 脚本 2.创建 Binding 对象并设置 args ...

  9. 2021-03-10 模板扩展类调用模板基类成员函数

    侯捷书内 : 扩展模板类 内通过  this->  指模板基类的成员函数,或通过   基类名::  的方式调用 基类成员函数 侯捷书内说: 扩展模板类,找不到模板基类的成员函数 但是在vs201 ...

最新文章

  1. 离开互联网上岸1年后,我后悔了!重回大厂内卷
  2. CrazyWing:Python自动化运维开发实战 九、Python数据类型之列表
  3. C/C++程序从编译到最终生成可执行文件的过程分析
  4. CG-CTF-Web-AAencode
  5. 移动端小程序 腾讯地图sdk 当前位置 地址你解析 距离计算
  6. 在delphi中如何动态建立类的实例
  7. MindSpore手写数字识别初体验,深度学习也没那么神秘嘛
  8. 德力西双电源自动转换开关说明书_今日优品:南开区FLQ3-25双电源自动转换开关全国服务-老友网...
  9. 在边缘计算大热的背景下,为何Akamai敢说自己就是边缘
  10. iOS 开发比较实用的框架总结(上)
  11. 计算机做游戏软件视频,电脑录屏工具D3DGear录制游戏视频教程
  12. MySQL分区表详解
  13. CCF所有领域best paper合集!发顶会论文必看!中国计算机学会推荐会议的Best paper~
  14. 阿里巴巴java开发手册一方库、二方库、三方库都是什么东东
  15. 冰点文库的替代品【Wenku Doc Downloader】用于下载各种文库的材料
  16. 【机器人学、机器人控视觉与控制】四足机器人MATLAB仿真
  17. oracle用户删除了可以恢复吗,oracle_oracle误删数据恢复方法小结,如果用户误删/更新了数据后, - phpStudy...
  18. 《越狱》中的项目管理——两个版本的对比
  19. Ubuntu 12.04系统天嵌Linux交叉编译开发工具的安装
  20. android开发整人软件,趣味整人软件:让手机屏幕一点就碎

热门文章

  1. 从一个activity返回
  2. hadoop的部署以及应用
  3. Git tag常用命令分享
  4. Java-访问修饰符
  5. pl/sql 中变量定义范围的小例子:
  6. Comparator和Comparable (转)
  7. redhat as4 上安装 MySQL5
  8. 无线网络实验之五:无线路由器防火墙设置
  9. Q145: 三次曲线对比及其矩阵表示(Bezier, B-Spline, Hermite, Catmull-Rom)
  10. linux grub 删除文件,删除grub的方法(转)