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.pswp.cn/news/710643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710643.shtml
英文地址,請注明出處:http://en.pswp.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…