C#中的this

2023-11-06

一、C# 中的this   C#中的保留字this仅限于在构造函数,类的方法和类的实例中使用。   * 在类的构造函数中出现的this作为一个值类型,它表示对正在构造的对象本身的引用   * 在类的方法中出现的this作为一个值类型,表示对调用该方法的对象的引用   * 在结构的构造函数中出现的this作为一个变量类型,表示对正在构造的结构的引用   * 在结构的方法中出现this作为一个变量类型,表示对调用该方法的结构的引用   除此之外,其他地方使用this保留字都是不合法的。   using System;   class A   {   public int x;   public void Main()   {   x=5;   Console.WriteLine("this is the value of the x:{0}",x);   Console.WriteLine("this is the value of the this.x:{0}",this.x);   }   }   这个程序不知道为什么执行的时候出现问题。   成员常量   public const double X=1.0   关键字const用于声明常量,后面要声明的常量的类型。   类的常量的修饰符号:   单词this是C#中的保留字,它允许一个对象指向它自己。在方法内部,this引用可以用于指向任何当前执行的对象。

举例

  例如:在一个叫做ChessPiece的类中,可以有个方法叫Move,它可能包含下列行:   if(this.position==piece.position)   result=false;   在这种情况下,this引用用来澄清是哪个position被引用了。this引用指向触发方法的对象。所以如果下面这行用   于触发方法,this引用指向firstshop:   firstshop.Move();   但是,如果另外一个对象用于触发方法,this引用就指向它。所以,如果使用了下面的调用,Move方法中的this引   用就指向secondshop:   secondshop.Move();   经常地,this引用用于区分构造函数的参数和它们相对应的同名的实例变量。例如:一个叫做Account类的构造函数   如下所示:   public Account(string owner, long account, double initial)   {   name=owner;   acctNumber=account;   balance=initial;   }   在编写这个构造函数时,我们特意为参数去了不同的名字来区分它们与实例变量name,accNumber,和balance。这个区分是任意的。构造函数分来可以用this引用写成如下所示:(这用更容易让人理解和接受)   public Account(string name, long acctNumber, double balance)   {   this.name=name;   this.acctNumber=acctNumber;   this.balance=balance;   }   在这个版本的构造函数(非静态的构造函数是在创建类的对象的时候被自动调用的)中,this引用特别指向对象的实例变量。赋值语句右边的变量指向形参。这个方法消除了为了变量取不同的但是等价的名字的需要。这种情况有事在其它方法中发生,但通常出现在构造函数中。

  public ;private;protected;internal;new

二、this 是不是用不用都一样?

比如你的类中有一个成员变量为a。在你的成员函数中有定义了一个局部变量a。此时就必须使用this关键字来指示类的成员。也就是类的成员变量a写为this.a  其实这个很容易理解的,你写的那些响应函数,说白了都是类方法。   在程序运行后,可能会被很多这个类的实例(对象)来调用。。。那么请问,系统怎么知道调用这个类方法的是谁?是哪个对象?   所以,这时this就发挥它的作用啦。   每当一个对象调用这个类方法的时候,系统就会自动做这个对象的指针赋给this指针。   this指当前类   比如在一个AAA类里有一个aaa的方法   在这个AAA类中调用这个aaa方法就可以用this.aaa   如果是在别的类中就要实例化一个对象来调用这个方法   AAA a=new AAA();   a.aaa;   在静态的方法中不能使用this   如main方法就是一个静态方法  this是保留的指针。指向当前对象。它的好处就是在编译期就可以获得对象的地址。比如一个类中有个成员类。成员类需使用上层类的函数,就可以把this传到成员类中。  this 关键字引用类的当前实例
三、C#构造函数中this 和 base()一起使用?
不可以同时使用。  通常在一个类中,使用一个参数最齐全的构造函数作为主构造函数,其他构造函数都使用this来指向它。  当一个类继承它的时候,比较好的做法是首先按照父类中每个构造函数的签名都实现一个。也是指定一个主构造函数。其他构造函数都使用this指向它。而这个主构造函数使用base指向父类的构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中的this 的相关文章

随机推荐

  • Activiti源码分析

    Activiti是业界很流行的java工作流引擎 关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题 相关内容可以baidu一下 Activiti从架构角度看是比较优秀的 是很面向对象的 是我所阅读过的代码结构很棒的开源软
  • Element ui table获取当前索引值 index

    使用 scope index来获取当前索引值
  • CSS/HTML静态购物网站项目源码解析(品优购)——该项目包含主页、注册页、列表页三个网页

    注 该项目所涉及的素材文件请QQ联系作者 Etui 3416252112 首先 上图 index html 主页 register html 注册页 list html 列表页 摘要 作为一个前端初学者 这是我学完html和css基础后做的
  • [Rpackage]R无法安装包的终极解决方法,附详细步骤

    作为R的新使用者 我曾经也经常碰上某些R包死活无法安装的问题 例如机器学习调参的caret包等 网上很多方法也都没法解决 除却少数个别包之外 大部分的包都支持最新的R版本 一 下载最新的R包 https cran r project org
  • Hooks API 在 Vue 中的实现分析

    作者 长峰 初次听到 React Hooks 是在其刚发布的那几天 网上铺天盖地的文章介绍它 看字面意思是 React 钩子 就想当然地理解应该是修改 React 组件的钩子吧 React 延伸的概念非常多 高阶组件 函数式 Render
  • BearPi-IoT Std学习笔记9——使用I2C读取BH1750光强度传感器数据

    1 BH1750模块 E53 SC1扩展板 BH1750FV1是两线式串行总线接口 IIC 的16位数字输出型环境光强度传感器 利用它的高分辨率可以探测较大范围内的光照强度变化 1lx 65535lx BH1750的原理图如下 2 配置 首
  • 解决XShell和Xftp远程连接Ubuntu失败,报找不到匹配的key exchange算法的错误

    我下载的linux系统是当前最新的Ubuntu 20 04的 使用的远程连接工具是XShell 5和Xftp 4 XShell可以连上 但是Xftp就一直报下图这个错误 尝试了删除ssh host的各种key 然后重新生成 重启ssh服务
  • 个人wiki搭建资料整理

    个人wiki搭建 一 大型企业级wiki Confluence Confluence是一个专业的企业知识管理与协同软件 也可以用于构建企业wiki 使用简单 但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息 文档协作 集体讨论 信息
  • Java中NIO和IO的比较

    NIO是为了弥补IO操作的不足而诞生的 NIO的一些新特性有 非阻塞I O 选择器 缓冲以及管道 管道 Channel 缓冲 Buffer 选择器 Selector 是其主要特征 概念解释 Channel 管道实际上就像传统IO中的流 到任
  • m3u8格式的视频链接怎么在自己电脑上播放

    本文接上篇文章 网页播放器 CKplayer 的视频怎么下载 m3u8简单探索 上篇文章提到 怎么到视频网站通过浏览器抓包分析 得到视频的源地址 看这篇文章之前 最好可以去先看一看上篇博文的介绍 上篇文章我们介绍到我们能够得到视频的源地址
  • SpringBoot 之数据源配置

    文章目录 市面上的几种数据源比对 SpringBoot自动装配DataSource原理 HiKariCP 数据源配置 Druid 数据源配置 SpringBoot集成Druid连接池 Druid 多数据源配置 不同Mapper操作不同数据源
  • 初等模型---光盘的数据容量

    问题分析 光盘的外观尺寸是由些大公司成立的联盟决定的 如CD DVD等盘片的外径为120mm 并且沿外边缘留有2mm宽的环形区域不存储信息 CLV光盘存储信息的内圈直径为45mm 在内外圈之间的环形区域 经过编码的数字信息 以一定深度和宽度
  • MySQL 8用户及权限管理

    文章目录 参考文档 查看权限 安装后 登录测试 添加帐户 分配特权和删除帐户 扩展 创建远程访问新用户并授权 参考文档 官方链接 https dev mysql com doc refman 8 0 en create user html
  • 简单的扫雷程序的实现

    define CRT SECURE NO WARNINGS include
  • js操作时间过当天晚上00:00清除本地存储

    const end new Date new Date new Date toLocaleDateString getTime 24 60 60 1000 1 getTime 当天23 59 59秒 转换成的毫秒数 const start
  • banner切换

    html代码 div div a img src imgs p1 png alt a a img src imgs p2 jpg alt a a img src imgs p3 jpg alt a a img src imgs p4 jpg
  • 【javascript】导航栏

    要实现这样的效果主要有两点 第一 当鼠标经过主导航栏里面的内容就会被放大 鼠标离开后就会恢复原来的样子 第二 当鼠标经过主导航时对应的副导航的内容就会呈现
  • 一个完美的自动化测试框架应该怎么写?

    一 什么是自动化测试框架 自动化测试框架是为自动化测试用例或者脚本提供执行环境而搭建的基础设施 自动化测试框架有助于有效地开发 执行和报告自动化测试用例 优点 代码复用 提高测试效率 更高的测试覆盖率 维护成本低 更早发现和记录bug 二
  • Oracle RAC 更改网卡名称

    如 原网卡eth1 为增加网卡可靠性 把eth1和eth3绑定为bond0 主备模式提供服务 更改名称后RAC会无法启动网络服务 还需要更改的操作如下 u01 app 11 2 0 grid bin oifcfg getif u01 app
  • C#中的this

    一 C 中的this C 中的保留字this仅限于在构造函数 类的方法和类的实例中使用 在类的构造函数中出现的this作为一个值类型 它表示对正在构造的对象本身的引用 在类的方法中出现的this作为一个值类型 表示对调用该方法的对象的引用