windows C#-使用構造函數

實例化類或結構時,將會調用其構造函數。 構造函數與該類或結構具有相同名稱,并且通常初始化新對象的數據成員。

在下面的示例中,通過使用簡單構造函數定義了一個名為 Taxi 的類。 然后使用 new 運算符對該類進行實例化。 在為新對象分配內存之后,new 運算符立即調用 Taxi 構造函數。

public class Taxi
{public bool IsInitialized;public Taxi(){IsInitialized = true;}
}class TestTaxi
{static void Main(){Taxi t = new Taxi();Console.WriteLine(t.IsInitialized);}
}

不帶任何參數的構造函數稱為“無參數構造函數”。 每當使用 new 運算符實例化對象且不為 new 提供任何參數時,會調用無參數構造函數。 C# 12 引入了主構造函數。 主構造函數指定為初始化新對象而必須提供的參數。?

除非類是靜態的,否則 C# 編譯器將為無構造函數的類提供一個公共的無參數構造函數,以便該類可以實例化。?

通過將構造函數設置為私有構造函數,可以阻止類被實例化,如下所示:

class NLog
{// Private Constructor:private NLog() { }public static double e = Math.E;  //2.71828...
}

?結構類型的構造函數類似于類構造函數。 使用 new 實例化結構類型時,將調用構造函數。 將 struct 設置為其 default 值時,運行時會將結構中的所有內存初始化為 0。 在 C# 10 之前,structs 不能包含顯式無參數構造函數,因為編譯器會自動提供一個。?

以下代碼使用 Int32 的無參數構造函數,因此可確保整數已初始化:

int i = new int();
Console.WriteLine(i);// 但是,下面的代碼會導致編譯器錯誤,因為它不使用 new,而且嘗試使用尚未初始化的對象:
int i;
Console.WriteLine(i);// 或者,可將基于 structs 的對象(包括所有內置數值類型)初始化或賦值后使用,如下面的示例所示:
int a = 44;  // Initialize the value type...
int b;
b = 33;      // Or assign it before using it.
Console.WriteLine("{0}, {1}", a, b);

類和結構都可以定義采用參數的構造函數,包括主構造函數。 必須通過 new 語句或 base 語句調用帶參數的構造函數。 類和結構還可以定義多個構造函數,并且二者均無需定義無參數構造函數。 例如:

public class Employee
{public int Salary;public Employee() { }public Employee(int annualSalary){Salary = annualSalary;}public Employee(int weeklySalary, int numberOfWeeks){Salary = weeklySalary * numberOfWeeks;}
}

可使用下面任一語句創建此類:

Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);

構造函數可以使用 base 關鍵字調用基類的構造函數。 例如:

public class Manager : Employee
{public Manager(int annualSalary): base(annualSalary){//Add further instructions here.}
}

在此示例中,在執行構造函數塊之前調用基類的構造函數。 base 關鍵字可帶參數使用,也可不帶參數使用。 構造函數的任何參數都可用作 base 的參數,或用作表達式的一部分。?

在派生類中,如果不使用 base 關鍵字來顯式調用基類構造函數,則將隱式調用無參數構造函數(若有)。 下面的構造函數聲明等效:

public Manager(int initialData)
{//Add further instructions here.
}public Manager(int initialData): base()
{//Add further instructions here.
}

如果基類沒有提供無參數構造函數,派生類必須使用 base 顯式調用基類構造函數。

構造函數可以使用 this 關鍵字調用同一對象中的另一構造函數。 和 base 一樣,this 可帶參數使用也可不帶參數使用,構造函數中的任何參數都可用作 this 的參數,或者用作表達式的一部分。 例如,可以使用 this 重寫前一示例中的第二個構造函數:

public Employee(int weeklySalary, int numberOfWeeks): this(weeklySalary * numberOfWeeks)
{
}

上一示例中使用 this 關鍵字會導致此構造函數被調用:

public Employee(int annualSalary)
{Salary = annualSalary;
}

可以將構造函數標記為public、private、protected、internal、protected internal 或 private protected。 這些訪問修飾符定義類的用戶構造該類的方式。?

可使用 static 關鍵字將構造函數聲明為靜態構造函數。 在訪問任何靜態字段之前,都將自動調用靜態構造函數,它們用于初始化靜態類成員。

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

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

相關文章

研發效能DevOps: Vite 使用 Element Plus

目錄 一、實驗 1.環境 2.初始化前端項目 3.安裝 vue-route 4.安裝 pinia 5.安裝 axios 6.安裝 Element Plus 7.gitee創建工程 8. 配置路由映射 9.Vite 使用 Element Plus 二、問題 1.README.md 文檔推送到gitee未自動換行 2.訪問login頁面顯示空白 3.表單輸入賬戶…

5G 模組 RG500Q常用AT命令

5G 模組 RG500Q常用AT命令 5G 模組 RG500Q常用AT命令 at ATQNWPREFCFG\"mode_pref\",nr5g && sleep 1 at ATQNWPREFCFG\"nr5g_band\",79 && sleep 1 at atqnwlock\"commo…

NVIDIA DeepStream插件之Gst-nvtracker

NVIDIA DeepStream插件之Gst-nvtracker 1. 源由2. 基礎知識3. Gst-nvtracker插件3.1 插件參數3.2 插件API接口 4. 分析問題5. 總結6. 參考資料 1. 源由 這篇的主要目的是稍微吐槽下NVIDIA的設計,當然其實他們做的還是不錯的(從系統架構設計角度看&#…

進程內存轉儲工具|內存鏡像提取-取證工具

1.內存轉儲,內存轉儲(Memory Dump)是將計算機的物理內存(RAM)內容復制到一個文件中的過程,這個文件通常被稱為“內存轉儲文件”或“核心轉儲文件”(Core Dump),內存轉儲的主要目的是…

Lua語言入門 - Lua 面向對象

Lua 面向對象 面向對象編程(Object Oriented Programming,OOP)是一種非常流行的計算機編程架構,通過創建和操作對象來設計應用程序。 以下幾種編程語言都支持面向對象編程: CJavaObjective-CSmalltalkC#Ruby Lua 是…

Pyqt6在lineEdit中輸入文件名稱并創建或刪除JSON文件

1、創建JSON文件 代碼 import osdef addModulekeyWordFile(self):if "" ! self.lineEdit_module.text():moduleFile self.lineEdit_module.text() .jsonelse:self.toolLogPrinting(請輸入模塊名稱)returnfilePath modulekeyWordFileDir moduleFileif os.path.e…

【Leetcode 熱題 100】236. 二叉樹的最近公共祖先

問題背景 給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。 最近公共祖先的定義為:對于有根樹 T T T 的兩個節點 p p p、 q q q,最近公共祖先表示為一個節點 x x x,滿足 x x x 是 p p p、 q q q 的祖先且 x x x 的深度盡可能大…

數據結構--堆的向上調整和向下調整

文章目錄 1.完全二叉樹2.堆向上調整3.堆向下調整4.測試代碼 1.完全二叉樹 下面的這個就是對于我們的完全二叉樹的這個邏輯結構和物理結構的說明: 邏輯結構就是我們自己認為的進行購想出來的; 但是這個物理結構卻是我們的這個數據結構在內存里面的真是…

智能掛號系統設計典范:SSM 結合 Vue 在醫院的應用實現

摘要 隨著信息技術在管理上越來越深入而廣泛的應用,管理信息系統的實施在技術上已逐步成熟。本文介紹了醫院預約掛號系統的開發全過程。通過分析醫院預約掛號系統管理的不足,創建了一個計算機管理醫院預約掛號系統的方案。文章介紹了醫院預約掛號系統的系…

“魔法糖果盒的秘密:用樸素貝葉斯算法猜糖果顏色”

想象一下,你有一個神奇的糖果盒,這個糖果盒里有兩種糖果:紅色的和藍色的。你閉上眼睛,從盒子里拿出一個糖果,然后嘗一嘗,你想知道這個糖果是紅色的還是藍色的。樸素貝葉斯算法就像是一個魔法規則&#xff0…

Transform組件的用法

文章目錄 1. 概念介紹2. 使用方法3. 示例代碼我們在上一章回中介紹了Checkbox Widget相關的內容,本章回中將介紹Transform Widget.閑話休提,讓我們一起Talk Flutter吧。 1. 概念介紹 我們在這里說的Transform是一種容器類widget,它和Container組件類似。它可以包含其它的組件…

go面試問題

1 Go的內存逃逸如何分析 go build -gcflags-m main_pointer.go 2 http狀態碼 300 請求的資源可包括多個位置,相應可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇 301 永久移動。請求的資源已被永久的移動到新U…

康冠科技嵌入式面試題及參考答案

LCD 驅動你自己做了哪些內容? 在 LCD 驅動開發中,首先是硬件層面的理解。需要仔細研究 LCD 的數據手冊,明確其引腳定義,包括電源引腳、數據引腳、控制引腳等。比如,對于常見的 RGB 接口 LCD,要清楚哪幾個引腳是用于傳輸紅、綠、藍三種顏色的數據,以及像 VSYNC(垂直同步…

TouchGFX移植(5)增加觸屏驅動

一)增加驅動代碼gt9xxx.c和ctiic.c到工程中的BSP目錄下: 二)更改觸摸文件STM32TouchController.cpp 1)在STM32TouchController.cpp文件中增加: #include “gt9xxx.h” 2)增加gt9xxx_init(); void STM32TouchControlle…

初識面向對象晨考day09

1.類和對象什么關系 類是對象的抽象 對象是類的具體 2.什么是屬性和方法 一類事物共有的特征,使用屬性描述 一類事物共有的行為,使用方法描述 3.普通方法的定義格式 public 返回值類型 方法名(參數列表){} 4.什么是形參,什么是實參 形參是方法…

資源型數字化平臺該如何順利運營?

一、引言 隨著信息技術的迅猛發展,資源型數字化平臺在各領域的重要性日益凸顯。此類平臺整合各類資源,以數字化手段提升資源利用效率與價值,但確保其順利運營面臨諸多挑戰。 二、資源型數字化平臺特點 資源型數字化平臺具有資源整合性&…

GitLab的安裝和使用

1.GitLab 環境說明 系統版本 CentOS 7.2 x86_64 軟件版本 gitlab-ce-10.8.4 GitLab 是一個用于倉庫管理系統的開源項目,使用Git作為代碼管理工具,并在此基礎上搭建起來的web服務。可通過Web界面進行訪問公開的或者私人項目。它擁有與Github類似的功能…

Leetcode 串聯所有單詞的子串

算法思想(中文解釋) 這道題目要求我們在字符串 s 中找到所有子串,這些子串是字符串數組 words 中所有單詞的串聯,并且每個單詞只能使用一次,且順序可以任意。下面是代碼的算法思想: 1. 核心思路 分解問題…

解析在OceanBase創建分區的常見問題|OceanBase 用戶問題精粹

在《分區策略和管理分區計劃的實踐方案》這篇文章中,我們介紹了在ODC中制定分區策略及有效管理分區計劃的經驗。有不少用戶在該帖下提出了使用中的問題,其中一個關于創建分區的限制條件的問題,也是很多用戶遭遇的老問題。因此本文以其為切入&…

有哪些免費的 ERP 軟件可供選擇?哪些 ERP 軟件使用體驗較好?

想找個 “免費” 的 ERP 軟件? 咱得知道,ERP 那可是涉及財務、人力、供應鏈、采購、銷售等好多方面的重要企業軟件。功能這么全,能免費才怪呢!真要是有免費的,早就火遍大江南北,說不定把市場都壟斷了&…