c# this关键字

c#this关键字

1. 代表当前类的对象

class Father
{public int Age { get; set; }public string Name { get; set; }public Father(int age, string name){this.Age = age;this.Name = name;}public void Test(){Console.WriteLine($"name:{this.Name },age:{this.Age }");}}

调用:

Father  father = new Father(100, "小明");
father.Test ();
father = new Father(50, "小李");
father.Test();

输出:

name:小明,age:100
name:小李,age:50

2. 在同一个类中在一个构造函数中调用另一个构造函数

class Father
{public int Age { get; set; }public string Name { get; set; }public int Height { get; set; }public Father(int age, string name){this.Age = age;this.Name = name;}public void Test(){Console.WriteLine($"name:{this.Name },age:{this.Age }");}
}

如果要传入三个参数,那么可以多加一个构造函数,如下:

class Father
{public int Age { get; set; }public string Name { get; set; }public int Height { get; set; }public Father(int age, string name){this.Age = age;this.Name = name;}public Father(int age, string name, int height){this.Age = age;this.Name = name;this.Height = height;}public void Test(){Console.WriteLine($"name:{this.Name },age:{this.Age }");}}

也可以使用this来简化代码,如下:

class Father
{public int Age { get; set; }public string Name { get; set; }public int Height { get; set; }public Father(int age, string name){this.Age = age;this.Name = name;}public Father(int age, string name, int height):this (age ,name){this.Height = height;}public void Test(){Console.WriteLine($"name:{this.Name },age:{this.Age }");}}

3. 为某个类添加扩展方法

class Father
{public int Age { get; set; }public string Name { get; set; }public int Height { get; set; }public Father(int age, string name){this.Age = age;this.Name = name;}public Father(int age, string name, int height) : this(age, name){this.Height = height;}public void Test(){Console.WriteLine($"name:{this.Name },age:{this.Age }");}}
static class  FatherExtension
{public static  void Eat(this Father father )//指定为Father类添加扩展方法,无参方法{Console.WriteLine("吃饭");}public static void Run(this Father father,bool isRun)//添加有参方法{Console.WriteLine($"{isRun }");}
}

调用:

Father father = new Father(100, "小明");
father.Eat();
father.Run(true );

什么时候需要使用扩展方法,个人认为有两种情况,

  1. 某个类(非静态类)的源代码我们看不到,但是又想为这个类添加方法,这时候可以使用扩展方法,比如系统自带的一些类
  2. 为接口添加一个方法,并且这个方法对于实现接口的这些类来说方法都是一样的,如果在接口中添加这个方法的定义,那么我们就需要除了在接口中增加方法的定义以外,还需要在实现接口的每个类中写一个一模一样的方法

比如有个IPerson接口,里面有个MyAge的方法,然后我们现在想添加一个MyName的方法,并且MyName的内容一模一样,如果不使用扩展方法的话,则如下:

添加MyName方法前:

 	interface IPerson{void MyAge();}class Chinese : IPerson{public void MyAge(){Console.WriteLine(10);}}class American : IPerson{public void MyAge(){Console.WriteLine(5);}}

可以看到在Chinese 类中、American 类中都添加了一个MyName的方法,如果接口的实现类有100个的话,那么我们还要添加100个一模一样的方法,这样无疑是重复的工作,如果通过通过扩展方法对接口进行扩展,则如下面的代码所示:

 	interface IPerson{void MyAge();}class Chinese : IPerson{public void MyAge(){Console.WriteLine(10);}}class American : IPerson{public void MyAge(){Console.WriteLine(5);}}static  class IpersonExtension{public static void MyName(this IPerson person ){Console.WriteLine("小明");}}

从上面的代码可知,我们可以不更改接口和接口的实现类的代码,然后另外添加一个静态类,然后添加静态方法对接口进行扩展,同样实现了功能,但是减少了很多重复代码。

4. 索引器中用于访问集合元素

 	public  enum NameOrder{First,Second}public class Name<T>{public Name(T firstName, T lastName){this.FirstName = firstName;this.LastName = LastName;}public T FirstName { get; set; }public T LastName { get; set; }public T this[NameOrder index]{get{switch (index){case NameOrder.First:return FirstName;case NameOrder.Second:return LastName;default:return default;}}}}

调用:

Name<string> name = new Name<string>("四", "李");
string firstName = name[NameOrder.First];
Console.WriteLine(firstName );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实例:NX二次开发抽取平面以及标准柱面中心线

一、概述 最近体验许多外挂&#xff0c;包括胡波外挂、星空外挂及模圣等都有抽取面的中心线&#xff0c;由于刚刚学习&#xff0c;我尝试看看能不能做出来&#xff0c;本博客代码没有封装函数&#xff0c;代码有待改进&#xff0c;但基本可以实现相应的功能。 二、案例实现的功…

【web APIs】3、(学习笔记)有案例!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、概念其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 二、案例举例电梯导航 前言 掌握阻止事件冒泡的方法理解事件委托的实现原理 一、概念…

SpringCloud Alibaba(保姆级入门及操作)

第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个…

数学建模【分类模型】

一、分类模型简介 本篇将介绍分类模型。对于二分类模型&#xff0c;我们将介绍逻辑回归&#xff08;logistic regression&#xff09;和Fisher线性判别分析两种分类算法&#xff1b;对于多分类模型&#xff0c;我们将简单介绍SPSS中的多分类线性判别分析和多分类逻辑回归。 分…

Java面试题之并发

并发 1.并发编程的优缺点&#xff1f;2.并发编程三要素&#xff1f;3.什么叫指令重排&#xff1f;4.如何避免指令重排&#xff1f;5.并发&#xff1f;并行&#xff1f;串行&#xff1f;6.线程和进程的概念和区别&#xff1f;7.什么是上下文切换&#xff1f;8.守护线程和用户线程…

<网络安全>《60 概念讲解<第七课 网络模型OSI对应协议>》

1 OSI模型 OSI模型&#xff08;Open Systems Interconnection Model&#xff09;是一个由国际标准化组织&#xff08;ISO&#xff09;提出的概念模型&#xff0c;用于描述和标准化电信或计算系统的通信功能&#xff0c;以实现不同通信系统之间的互操作性。该模型将通信系统划分…

【k8s管理--Helm包管理器】

1、Helm的概念 Kubernetes包管器 Helm是查找、分享和使用软件构件Kubernetes的最优方式。 Helm管理名为chart的Kubernetes包的工具。Helm可以做以下的事情&#xff1a; 从头开始创建新的chat将chart打包成归档tgz)文件与存储chat的仓库进行交互在现有的Kubernetes集群中安装和…

【Android】View 的滑动

View 的滑动是 Android 实现自定义控件的基础&#xff0c;同时在开发中我们也难免会遇到 View 的滑动处理。其实不管是哪种滑动方式&#xff0c;其基本思想都是类似的&#xff1a;当点击事件传到 View 时&#xff0c;系统记下触摸点的坐标&#xff0c;手指移动时系统记下移动后…

【AI+应用】怎么快速制作一个类chatGPT套壳网站

最近有人问我&#xff0c; 看了我之前写的一篇文章 [人工智能] AI浪潮下Sora对于普通人的机会 &#xff0c; 怎么做一个类chatGPT的套壳网站&#xff0c;是从0开始做么。 对于普通人来说&#xff0c;万事不懂先AI&#xff0c; AI找不到答案搜索google或百度。对于程序员来说…

C# 获取类型 Type.GetType()

背景 C#是强类型语言&#xff0c;任何对象都有Type&#xff0c;有时候需要使用Type来进行反射、序列化、筛选等&#xff0c;获取Type有Type.GetType, typeof()&#xff0c;object.GetType() 等方法&#xff0c;本文重点介绍Type.GetType()。 系统类型/本程序集内的类型 对于系…

有哪些视频媒体?邀请视频媒体报道活动的好处

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 视频媒体在当今的媒体生态中占据了重要的地位。以下是一些主要的视频媒体类型&#xff1a; 电视台&#xff1a;如中央电视台、各省级卫视台、地方电视台等&#xff0c;他们拥有专业的视…

学习linux从0到初级工程师-3

一、LNMP 1.1 搭建LNMP LNMP&#xff1a;LinuxNginxMysqlPHP LNMP优势&#xff1a; 1.web服务器一种&#xff0c;Nginx处理静态文件、索引文件&#xff0c;自动索引的效率非常高&#xff1b; 2.作为代理服务器,Nginx可以实现无缓存的反向代理加速&#xff0c;提高网站运行…

探索Redis 6.0的新特性

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存中数据结构存储系统&#xff0c;通常被用作缓存、消息队列和实时数据处理等场景。它的简单性、高性能以及丰富的数据结构支持使其成为了众多开发者和企业的首选。在Redis 6.0版本中&#xff0c;引入了一…

Vue3报错Promise executor functions should not be async.

解决方法 加注释。。。// eslint-disable-next-line no-async-promise-executor // eslint-disable-next-line no-async-promise-executor new Promise<boolean>(async (resolve, reject) > {... }),

Ubuntu绑定USB接口到固定端口

绑定端口 打开终端&#xff0c;输入以下命令查看USB端口信息&#xff1a; udevadm info -a -n /dev/ttyUSB0执行后&#xff0c;可以看到部分输出如下: 找到第一个&#xff0c;a-b:c格式的KERNELS&#xff0c;记住这个值&#xff0c;后面会用到。 linlin-B660M-D2H-DDR4:~$ u…

【深蓝学院】移动机器人运动规划--第7章 集群机器人运动规划--笔记

文章目录 0. Contents1. Multi-Agent Path Finding (MAPF)1.1 HCA*1.2 Single-Agent A*1.3 ID1.4 M*1.5 Conflict-Based Search(CBS)1.6 ECBS1.6.1 heuristics1.6.2 Focal Search 2. Velocity Obstacle (VO&#xff0c;速度障碍物)2.1 VO2.2. RVO2.3 ORCA 3. Flocking model&am…

【每日前端面经】2023-02-29

题目来源: 牛客 如何理解前端这个岗位 简单地说就是设计师做好网页效果图&#xff0c;前端将效果图转化成页面&#xff0c;之后交给后端程序员&#xff0c;中间的这段工作就是前端 浏览器如何渲染HTML 将载入的HTML文件解析成DOM树&#xff0c;并且将各个标记标识解析成DOM…

SQL的窗口函数

SQL的窗口函数 文章目录 SQL的窗口函数1. 介绍2. 聚合函数0.数据准备1. AVG2. COUNT3. MAX4. MIN5. 标准差6. SUM 3. 排序函数1. CUME_DIST2. RANK, DENSE_RANK, ROW_NUMBER3. PERCENT_RANK4. NTILE 4. 值函数(偏移函数)1. FIRST_VALUE2. LAST_VALUE3. LAG4. LEAD5. NTH_VALUE …

ChatGPT4.0 的优势、升级 4.0 为什么这么难以及如何进行升级?

前言 “ChatGPT4.0一个月多少人民币&#xff1f;” ”chatgpt4账号“ ”chatgpt4 价格“ “chatgpt4多少钱” 最近发现很多小伙伴很想知道关于ChatGPT4.0的事情&#xff0c;于是写了这篇帖子&#xff0c;帮大家分析一下。 一、ChatGPT4.0 的优势 &#xff08;PS&#xff1a;…

LINUX基础培训二十七之shell标准输入、输出、错误

一、Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入&#xff0c;默认情况下&#xff0c;这恰好是你的终端。同样&#xff0c;一个命令通常将其输出写入到标准输出&#xff…