第八章 方法

1. 概述

  本章重點講述類型中的各種方法,包括實例構造器、類型構造器、操作符/類型轉換重載、擴展方法、分部方法。

2. 名詞解釋

  ① 構造器:是允許將類型的實例初始化為良好狀態的一種特殊方法。

3. 主要內容

  3.1 實例構造器和類(引用類型)

    ① 創建一個引用類型的實例時,首先為實例的數據字段分配內存,然后初始化對象的附加字段(類型對象指針和同步塊索引),最后調用類型的實例構造器 來設置對象的初始狀態。

    ② 實例構造器永遠不能被繼承。

    ③ 如果類的修飾符為static(sealed或abstract),編譯器不會在類的定義中生成一個默認構造器。

  3.2 實例構造器和結構(值類型)

    ① 值類型的實例構造器只有在顯示調用時才會執行。

  3.3 類型構造器

    ① 默認沒有定義類型構造器,只能定義一個。

    ② 必須是static,默認是私有的。保證只能被CLR調用。

    ③ 不要在值類型中定義類型構造器。

    ④ 類型構造器中的代碼只能訪問類型的靜態字段。

    ⑤ 顯式類型構造器可能包含具有副作用的代碼,所以需要精確拿捏運行的時間。

  3.4 操作符重載方法

    ① CLR規范要求操作符重載方法必須是 public 和 static 方法。

  3.5 轉換操作符方法

    ① C#中,implicit關鍵字告訴編譯器為了生成代碼來調用方法,不需要在源碼中進行顯式轉換。

      而explicit告訴編譯器只有在發現了顯式轉型時,才調用方法。

      operator關鍵字告訴編譯器該方法是一個轉換操作符。

      operator之后是對象要轉換成的類型,后面的括號中,是要從什么類型轉換。

      *建議將System.Decimal作為一個典型來研究操作符重載和轉換操作符方法。

public static implicit operator Rational (Single num)
{return new Rational(num);
}public static explicit operator Int32 (Rational r)
{return r.ToInt32();
}
Rational r2 = 2.5F;
Int32 x = (Int32) r1;

  3.6 擴展方法

    C#的擴展方法,允許你定義一個靜態方法,并用實例方法的語法來調用它。(在第一個參數前加this關鍵字)

    3.6.1 規則和原則

      ① C#只支持擴展方法,不支持擴展屬性、擴展事件、擴展操作符等。

      ② 擴展方法必須在非泛型的靜態類中聲明。

      ③ 要求靜態類本身具有文件作用域。

      ④要求引用所屬的命名空間。

    3.6.2 用擴展方法擴展各種類型

      可以為委托或者枚舉類型添加擴展方法。

    3.6.3 ExtensionAttribute類

      C#中,一旦用this關鍵字標記了某個靜態方法的第一個參數,編譯器就會在內部向該方法應用一個定制attribute。

  3.7 分部方法

    ① 只能在分部類或結構中聲明。

    ② 只能返回void,不能有輸出參數。

    ③ 聲明和實現必須具有完全一致的簽名。

    ④ 如果沒有對應的實現部分,便不能在代碼中創建一個委托來引用這個分部方法。

    ⑤ 總是被視為private方法。

4. 總結

  

?

轉載于:https://www.cnblogs.com/stone_lv/p/4306017.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java生鮮電商平臺-促銷架構以及秒殺解決方案實戰

Java生鮮電商平臺-促銷架構以及秒殺解決方案實戰 背景:隨著這幾年的電商的大熱,我們經常看到一些商家為了促銷和快速收益,紛紛推出了秒殺活動.不管是日常的超市里面的促銷,明星演唱會門票售賣,還是春節訂閱火車票,等等我們都能看到秒殺活動的影子. 1. 構建秒殺活動架構 1.1 說明…

PHP---錯誤處理(error)

錯誤的級別 1. notice:提示2. warning:警告3. error:致命錯誤12345 注:notice和warning報錯后繼續執行,error報錯后停止 錯誤的提示方法 方法一:顯示在瀏覽器上 方法二:記錄在日志中執行 錯…

對url給后臺傳數據的時候特殊字符需要轉義

URL中的字符只能是ASCII字符,但是ASCII字符比較少,而URL則常常包含ASCII字符集以外的字符,如非英語字符,漢字,特殊符號等等,所以要對URL進行轉換。這個過程就叫做URL編碼,或者叫URL轉義&#xf…

PHP Cookie處理

Cookie 是什么? cookie是保存在客戶端的信息包(一個文件) cookie 常用于識別用戶。 cookie 是一種服務器留在用戶計算機上的小文件。每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。通過 PHP,您能…

python裝飾器補充

帶參裝飾器 msg """ 1.QQ 2.wechat """ avg input(驗證方式:)def auth(avg):def wrapper(f):def inner(*args,**kwargs):if avg QQ:user input(name)pwd input(password)if user alex and pwd 123456:f()else:print(輸入錯誤)…

PHP-連接數據庫

1.2 連接數據庫 通過PHP做MySQL的客戶端 1.2.1 開啟mysqli擴展 在php.ini中開啟mysqli擴展 extensionphp_mysqli.dll開啟擴展后重啟服務器,就可以使用mysqli_函數了,1.2.2 連接數據庫 創建news數據庫 -- 創建表 drop table if exists news; create …

python模塊初始與time、datetime及random

模塊初始與time、datetime及random 模塊初始 模塊的概念(本質為一個py文件) python模塊可以將代碼量較大的程序分割成多個有組織的、彼此獨立但又能互相交互的代碼片段,這些自我包含的有組織 的代碼段就是模塊,模塊在物理形式上表…

PHP-面向對象編程教程

1.2 面向對象介紹 1.2.1 介紹 面向對象是一個編程思想。編程思想有面向過程和面向對象 面向過程:編程思路集中的是過程上 面向對象:編程思路集中在參與的對象 以去飯館吃飯為例: ? 面向過程:點菜——做菜——上菜——吃飯—…

vue-property-decorator使用指南

在Vue中使用TypeScript時,非常好用的一個庫,使用裝飾器來簡化書寫。 一、安裝 npm i -S vue-property-decorator PropPropSyncProvideModelWatchInjectProvideEmitComponent (provided by vue-class-component)Mixins (the helper function named mix…

Java生鮮電商平臺-統一異常處理及架構實戰

Java生鮮電商平臺-統一異常處理及架構實戰 補充說明:本文講得比較細,所以篇幅較長。 請認真讀完,希望讀完后能對統一異常處理有一個清晰的認識。 背景 軟件開發過程中,不可避免的是需要處理各種異常,就我自己來說&…

VScode新建自定義模板快捷方式

VS新建vue文件的自定義模板 在使用vscode開發的時候,新建vue文件是不可或缺的,但是VSCode并沒有vue文件的初始化模板,這個需要自定義模板。 我們可以使用vscode的snippets在新建.vue 文件后輕松獲得一套模板。 具體步驟 打開VSCode -> …

ESLint Unary operator ‘++‘ used.

ESLint Unary operator used. 安裝了ESLint&#xff0c;用這個工具之后發現居然不會寫代碼了。好尷尬~ 感覺自己以前寫的JS都是假的... 沒有操作 increment(state) {state.count ; },for(let i 0; i < temp.length; i} {//... } 然后報了如下錯誤 Unary operator u…

sencha touch筆記(6)——路由控制(1)

做項目的時候在界面的跳轉上遇到了挺大的問題&#xff0c;本來跳轉不想通過路由來控制的&#xff0c;沒辦法&#xff0c;只能再去看一下路由的跳轉方式了。 應用程序的界面發生改變后&#xff0c;可以通過路由讓應用程序的界面返回到改變之前的狀態&#xff0c;例如瀏覽器中頁面…

Angular rxjs operators 筆記

toArray /*toArray把結果都塞到數組里去 */ const source = interval(1000); const example = source.pipe(take(10),toArray() );example.subscribe(val => console.log(val)); // output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] toArray /*pairwise把相鄰的兩個流組成數組 */…

Angular rxjs Subject筆記

BehaviorSubject /*ehaviorSubject接受一個默認參數,相當于new Subject后自動next(aa)之后到行為和Subject一致 */ const behave = new BehaviorSubject(aa); behave.subscribe(res => {console.log(res)

面試39 MySQL讀寫分離

&#xff08;1&#xff09;如何實現mysql的讀寫分離&#xff1f; 其實很簡單&#xff0c;就是基于主從復制架構&#xff0c;簡單來說&#xff0c;就搞一個主庫&#xff0c;掛多個從庫&#xff0c;然后我們就單單只是寫主庫&#xff0c;然后主庫會自動把數據給同步到從庫上去。 …

Angular自學筆記(一)ngModule 元數據

工作硬上開發angular項目,好難啊,上網搜資料教程真的賊少,吐槽真的沒什么人用angular,自己學習到處搜集整理的筆記,分享出來,方便查看理解總結。應該適用于angular11系列(更新真快,反正我也不知道之前低版本不同 手動狗頭) 什么是angular module(ngModule)? angula…

cookbook_數據結構和算法

1.1將數據分解為單獨的變量list_a [1,2,3,4,5,6,7,8,9] a,b,c,d,e,f,g,h,i list_a print(a,b,c,d,e,f,g,h,i) #使用相等數量的參數來接收_,b,c,d,e,f,g,h,_ list_a print(b,c,d,e,f,g,h) #不要的數據使用一個沒有用的變量接收 View Code1.2從任意長度的可迭代對象中分解元素…

Angular自學筆記(二)顯示數據 綁定屬性

顯示數據 1.顯示數據 ng的模版中,默認用雙大括號{{}}綁定組件中的變量顯示出來 import {Component } from @angular/core; @Component({selector: app-root,template: `<h1>{{title}}</h1><h2>My favorite hero is: {{myHero}}</h2>`

機器學習概覽

什么是機器學習&#xff1f; 廣義概念&#xff1a; 機器學習是讓計算機具有學習的能力&#xff0c;無需明確的編程 —— 亞瑟薩繆爾&#xff0c;1959 工程概念&#xff1a; 計算機程序利用經驗 E 學習任務 T&#xff0c;性能是 P&#xff0c;如果針對任務 T 的性能 P 隨著經驗 …