.Net Framework 4/C# 初識 C#

一、C# 專欄

? ? ? ? 由于博主原先是做的Linux C/C++ 嵌入式領域,因此對 C# 也較為懵懂,C# 是典型的 OOP 編程,這一點與 C++ 類似,但是在語法上,C# 移除了對指針的運用以及內存管理,所以既不用考慮指針的復雜運用也不用考慮堆棧內存的手動釋放。

? ? ? ? 現在出于工作需要,不得不學習 C# 語言,但這塊內容的資料我認為是比較有限的,無論是某站,還是二手書,對于深入的內容講得是非常少的,在編程的時候,即便是按需查詢也是相當耗費時間以及很難第一時間全部掌握的,所以開辟此專欄也是為了記錄在學習過程中的涉及到的深入知識點。

? ? ? ? 但為了將一些零碎的知識便于補充,還是在本章中,添加對 C# 基礎知識的記錄。

二、C# 基礎知識

1、C# 標準輸入輸出函數

????????Console 類表示控制臺應用程序的標準輸入流、輸出流和錯誤流。

????????Console 類中與輸入/輸出相關的方法如表所示:

方法

說明

Read()

從標準輸入流讀取下一個字符,返回 int 類型,只能記錄 int 類型數據

ReadLine()

從標準輸入流讀取下一行字符,返回值為 string 類型

Write()

將指定的值寫入標準輸出流,輸出后不換行

WriteLine()

將當前行終止符寫入標準輸出流,輸出后換行

2、C# 數據類型(補充)

1、變量

????????C# 中的變量類型根據其定義可以分為兩種:一種是值類型,另一種是引用類型。值類型變量直接存儲其數據值,主要包含整數類型、浮點類型以及布爾類型等,值類型變量在棧中進行分配;引用類型是構建 C# 應用程序的主要對象類型數據,在應用程序執行的過程中,預先定義的對象類型以 new 創建對象實例,并且存儲在堆棧中。

1.1)值類型和引用類型

????????值類型變量直接存儲其數據值,主要包含整數類型、浮點類型以及布爾類型等。值類型變量在堆棧中進行分配。當以值類型作函數參數傳遞時,在函數內部改變形參的值,都不會改變實參原本的值。

????????引用類型是構建 C# 應用程序的主要對象類型數據,引用類型必須使用 new 關鍵字來創建引用類型變量。當以引用類型作函數參數傳遞時,需要用到 ref 關鍵字,此時在函數內部改變形參的值,會改變實參原本的值。

1.2)裝箱和拆箱

????????將值類型轉換為引用類型稱為裝箱,反之,將引用類型轉換為值類型稱為拆箱。

1.3)單精度浮點型

????????單精度浮點型 float 的小數精確到第7位,但是 C# 默認小數為 double 型,因此,在需要使用 float 型數據時,需要在數值后面加上 f 或者 F 來強制其值為 float 類型。

1.4)金錢類型 decimal

????????用來存儲小數點超過16位(double)的數據類型:

????????decimal a = 2000m;

????????數據后面必須加一個 m 以區分數據類型,大小寫均可以。

2、整數類型

????????與 C++ 不同的是,C# 中有兩個額外的整數類型:sbyte 表示8位有符號整數,取值范圍為:-128~127 以及 byte 表示8位無符號整數,取值范圍為:0~255。

????????其余與 C++ 類似,只是無符號 unsigned 縮寫為“u”,例如:uint、ushort等。

3、C# 類訪問權限

1、類訪問權限與 C++ 的區別

????????C++中通過 public: 和 private: 的語法批量聲明成員的訪問權限,但 C# 要求每個成員單獨指定訪問修飾符。因此不用添加冒號,而且,默認訪問權限是 private 私有的。

????????例如有:

class Person
{public void func(int a){m_A = a;Console.WriteLine("這是一個C#代碼函數打印 m_A = "+ m_A);Console.ReadKey();}private int m_A;
};

????????C# 的類必須屬于命名空間,沒有全局作用域的類定義。

2、類對象的創建與 C++ 的區別

????????類的創建不能簡單的只創建類對象,而是應當用 new 的關鍵字方式創建。

3、類訪問修飾符(訪問權限)

????????C# 中的訪問修飾符主要包括 private、protected、internal、protected internal 和 public。主要區別如下表所示:

訪問修飾符

應用范圍

訪問范圍

private

所有類或者成員

只能在本類中訪問

protected

類和內嵌的所有成員

在本類和其子類中訪問

internal

類和內嵌的所有成員

在同一程序集中訪問

protected internal

類和內嵌的所有成員

在同一程序集和子類中訪問

public

所有類或者成員

任何程序都可以訪問

????????需要注意的是,在定義類時,只能使用 public 或者 internal,這取決于是否希望在包含類的程序集外部訪問它。

????????正常情況下不能把類定義為 private、protected 或者 protected internal 類型,但是可以使用它們定義嵌套的內部類(也就是在一個類中再聲明一個類),則內部類總是可以訪問外部的所有成員。

4、C# 數組

1、與 C/C++ 的區別??

????????在 C/C++ 中聲明一個數組時,中括號在數組名字的后面;而在 C# 中聲明一個數組時,中括號在數組元素類型的后面。

????????在 C# 中,聲明數組后,還不能訪問它的任何元素,因為聲明數組只給出了數組名和元素的數據類型,要真正使用數組,還需要為它分配內存空間,在為數組分配內存空間時,必須指明數組的長度,為數組分配內存空間的語法格式如下:

????????數組名稱 = new 數組元素類型[數組元素的個數]

????????也可以在聲明的同時為數組分配內存空間:

????????數組元素類型[] 數組名稱 = new 數組元素類型[數組元素的個數]

2、一維數組的聲明和使用

????????一維數組的聲明語法格式如下:

????????type[] arrayName; //數組元素類型[] 數組名字

????????一維數組的使用例如有:

int[] arr1;
arr1 = new int[10];int[] arr2 = new int[10];
int[] arr3 = new int[10]{1,2,3,4,5,6,7,8,9,10};
int[] arr4 = {1,2,3,4,5,6,7,8,9,10};

????????可以使用 length 屬性來獲取數組的長度:arr1.length。

3、二維數組的聲明和使用

????????二維數組的聲明語法格式如下:

????????type[ , ] arrayName;

????????type[][] arrayName;

????????二維數組的使用例如有:

int[,] a = new int[2,4];	//定義一個兩行四列的 int 類型的二維數組int[][] b = new int[2][];
b[0] = new int[2];
b[1] = new int[3];			//不規則的二維數組int[,] c = new int[,]{{1,2},{3,4}};

4、動態二維數組的聲明和使用

????????動態二維數組的聲明語法格式如下:

????????type[] arrayName;

????????arrayName = new type[n1, n2, n3,,,,,,]

????????動態二維數組的使用例如有:

int m = 2;
int n = 2;
int[,] a = new int[m,n];	// m 和 n 可以是任意值

5、C# 字符與字符串

? ? ? ? C# 的字符類 char 的使用和字符串類 string 的使用與 C++ 類似,不同的是 C# 的字符串類中封裝了一些方法,這可以后續介紹。

6、C# 類

1、類的聲明

????????C# 中,類是使用 class 關鍵字來聲明的,語法如下:

類修飾符 class 類名
{}

2、構造函數和析構函數

????????C# 中的構造函數與析構函數同 C++ 類似,可以參考 C++ 中對象和類的類的構造函數和析構函數。

2.1)私有構造函數

????????與 C++ 不同的是,在定義構造函數時,也可以使用 private 進行修飾,用于表示構造函數只能在本類中訪問,在其它類中不能訪問,但是,如果類中只定義了私有構造函數,將導致類不能使用 new 運算符在外部代碼中實例化。

????????然而,可以通過編寫一個公共的靜態屬性或者方法來解決這個問題,例如有:

class Person
{private Person(){//私有構造函數}public static Person newPerson{return new Person();}static void Main(string[] args){Person p = new Person.newPerson();}
}

????????使用私有構造函數可以實現一種常見的設計模式——單例模式,即同一類創建的所有對象都是同一個實例。

2.2)靜態構造函數

????????在 C# 中,可以為類定義靜態構造函數,這種構造函數只執行一次,編寫靜態構造函數的主要原因是類有一些靜態字段或屬性,需要在第一次使用類之前從外部源中初始化這些靜態字段和屬性。

????????在定義靜態構造函數時,不能設置訪問修飾符,因為其他 C# 代碼從來不會調用它,它只在引用類之前執行一次,另外,靜態構造函數不能帶任何參數,而且一個類中只能有一個靜態構造函數,它只能訪問類的靜態成員,不能訪問實例成員。

????????例如有:

namespace _4._3
{internal class Program{static Program(){Console.WriteLine("靜態構造函數的調用");}private Program() {Console.WriteLine("私有構造函數的調用");}static void Main(string[] args){Program p1 = new Program();Program p2 = new Program();Program p3 = new Program();Console.ReadLine();}}

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

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

相關文章

Python趣學篇:Pygame實現粒子煙花綻放效果

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 專欄介紹:《Python星球日記》?? 目錄 一、項目亮點與效果預覽1. 核心特色功能2. 技術學習價值二、技術原理深度解析1. 向量運算:煙花運動的數學基…

NiceGUI 是一個基于 Python 的現代 Web 應用框架

NiceGUI 是一個基于 Python 的現代 Web 應用框架,它允許開發者直接使用 Python 構建交互式 Web 界面,而無需編寫前端代碼。以下是 NiceGUI 的主要功能和特點: 核心功能 1.簡單易用的 UI 組件 提供按鈕、文本框、下拉菜單、滑塊、圖表等常見…

Linux中的mysql邏輯備份與恢復

一、安裝mysql社區服務 二、數據庫的介紹 三、備份類型和備份工具 一、安裝mysql社區服務 這是小編自己寫的,沒有安裝的去看看 Linux換源以及yum安裝nginx和mysql-CSDN博客 二、數據庫的介紹 2.1 數據庫的組成 數據庫是一堆物理文件的集合,主要包括…

鴻蒙UI開發——組件的自適應拉伸

1、概 述 針對常見的開發場景,ArkUI開發框架提供了非常多的自適應布局能力,這些布局可以獨立使用,也可多種布局疊加使用。本文針對ArkUI提供的拉伸能力做簡單討論。 拉伸能力是指容器組件尺寸發生變化時,增加或減小的空間全部分…

K 值選對,準確率翻倍:KNN 算法調參的黃金法則

目錄 一、背景介紹 二、KNN 算法原理 2.1 核心思想 2.2 距離度量方法 2.3 算法流程 2.4算法結構: 三、KNN 算法代碼實現 3.1 基于 Scikit-learn 的簡單實現 3.2 手動實現 KNN(自定義代碼) 四、K 值選擇與可視化分析 4.1 K 值對分類…

Azure DevOps Server 2022.2 補丁(Patch 5)

微軟Azure DevOps Server的產品組在4月8日發布了2022.2 的第5個補丁。下載路徑為:https://aka.ms/devops2022.2patch5 這個補丁的主要功能是修改了代理(Agent)二進制安裝文件的下載路徑;之前,微軟使用這個CND(域名為vstsagentpackage.azuree…

PHP7+MySQL5.6 查立得輕量級公交查詢系統

# PHP7MySQL5.6 查立得輕量級公交查詢系統 ## 系統簡介 本系統是一個基于PHP7和MySQL5.6的輕量級公交查詢系統(40KB級),支持線路查詢、站點查詢和換乘查詢功能。系統采用原生PHPMySQL開發,無需第三方框架,適合手機端訪問。 首發版本&#x…

Vue-Cropper:全面掌握圖片裁剪組件

Vue-Cropper 完全學習指南:Vue圖片裁剪組件 🎯 什么是 Vue-Cropper? Vue-Cropper 是一個簡單易用的Vue圖片裁剪組件,支持Vue2和Vue3。它提供了豐富的配置選項和回調方法,可以滿足各種圖片裁剪需求。 🌟 …

[Go] Option選項設計模式 — — 編程方式基礎入門

[Go] Option選項設計模式 — — 編程方式基礎入門 全部代碼地址,歡迎?? Github:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/go-demo/go-option 1 介紹 在 Go 開發中,我們經常遇到需要處理多參數配置的場景。傳統方…

【Unity開發】控制手機移動端的震動

🐾 個人主頁 🐾 阿松愛睡覺,橫豎醒不來 🏅你可以不屠龍,但不能不磨劍🗡 目錄 一、前言二、Unity的Handheld.Vibrate()三、調用Android原生代碼四、NiceVibrations插件五、DeviceVibration插件六、控制游戲手…

Linux 軟件安裝方式全解(適用于 CentOS/RHEL 系統)

🐧 Linux 軟件安裝方式全解(適用于 CentOS/RHEL 系統) 在 Linux 系統中,軟件安裝方式豐富多樣,常見于以下幾種方式: 安裝方式命令/工具說明軟件包管理器(推薦)yum, dnf, apt, zypp…

前端面試題-HTML篇

1. 請談談你對 Web 標準以及 W3C 的理解和認識。 我對 Web 標準 的理解是,它就像是互聯網世界的“交通規則”,由 W3C(World Wide Web Consortium,萬維網聯盟) 這樣一個國際性組織制定。這些規則規范了我們在編寫 HTML、CSS 和 JavaScript 時應該遵循的語法和行為,比如要…

ERROR: column cl.udt_name does not exist LINE 1 navicat打開金倉表報錯

描述: ERROR: column cl.udt_name does not exist LINE 1: …a.columns cl LEFT JOlN pg type ty ON ty.typname cl.udt nam. navicat連上金倉數據庫之后,想打開一張表看看,每張表都報這個錯,打不開 解決方案: 網上…

2025年- H61-Lc169--74.搜索二維矩陣(二分查找)--Java版

1.題目描述 2.思路 方法一: 定義其實坐標,右上角的元素(0,n-1)。進入while循環(注意邊界條件,行數小于m,列數要>0)從右上角開始開始向左遍歷(比當…

Jupyter MCP服務器部署實戰:AI模型與Python環境無縫集成教程

Jupyter MCP 服務器是基于模型上下文協議(Model Context Protocol, MCP)的 Jupyter 環境擴展組件,它能夠實現大型語言模型與實時編碼會話的無縫集成。該服務器通過標準化的協議接口,使 AI 模型能夠安全地訪問和操作 Jupyter 的核心…

MySQL下載安裝配置環境變量

MySQL下載安裝配置環境變量 文章目錄 MySQL下載安裝配置環境變量一、安裝MySQL1.1 下載1.2 安裝 二、查看MySQL服務是否啟動三、配置環境變量四、驗證 一、安裝MySQL 1.1 下載 官網社區版(免費版):https://dev.mysql.com/downloads/mysql/ …

WSL 安裝 Debian 12 后,Linux 如何安裝 curl , quickjs ?

在 WSL 的 Debian 12 系統中安裝 curl 非常簡單,你可以直接使用 APT 包管理器從官方倉庫安裝。以下是詳細步驟: 1. 更新軟件包索引 首先確保系統的包索引是最新的: sudo apt update2. 安裝 curl 執行以下命令安裝 curl: sudo…

Linux入門(十四)rpmyum

RPM 是RedHat PackManager的縮寫 rpm是用于互聯網下載包的打包及安裝工具 rpm查詢 查詢已安裝的rpm列表 rpm -qa查看系統是否安裝了psmisc rpm -qa | grep psmisc rpm -q psmisc查詢軟件包信息 rpm -qi psmisc查詢軟件包中的文件 rpm -ql psmisc根據文件全路徑 查詢文件所…

[git]忽略.gitignore文件

git rm --cached .gitignore 是一個 Git 命令,主要用于 從版本控制中移除已追蹤的 .gitignore 文件,但保留該文件在本地工作目錄中。以下是詳細解析: 一、命令拆解與核心作用 語法解析 git rm:Git 的刪除命令,用于從版本庫(Repository)中移除文件。--cached:關鍵參數…

Hive SQL 中 BY 系列關鍵字全解析:從排序、分發到分組的核心用法

一、排序與分發相關 BY 關鍵字 1. ORDER BY:全局統一排序 作用:對查詢結果進行全局排序,確保最終結果集完全有序(僅允許單個 Reducer 處理數據)。 語法: SELECT * FROM table_name ORDER BY column1 [A…