常量與變數詳解

来源:https://www.cnblogs.com/lyg520/archive/2018/12/04/10062686.html
-Advertisement-
Play Games

1、變數的基本概念 變數是指用來存儲特定類型的數據,可以根據需要隨時改變變數中所存儲的數據值。變數具有名稱、類型和值,因此使用變數之前必須先聲明變數,即指定變數的類型和名稱。 2、變數類型 變數類型根據其定義可以分為兩種:一種是值類型,另一種是引用類型。這兩種變數類型的區別在於數據的存儲方式,值類型 ...


1、變數的基本概念

  變數是指用來存儲特定類型的數據,可以根據需要隨時改變變數中所存儲的數據值。變數具有名稱、類型和值,因此使用變數之前必須先聲明變數,即指定變數的類型和名稱。

2、變數類型

  變數類型根據其定義可以分為兩種:一種是值類型,另一種是引用類型。這兩種變數類型的區別在於數據的存儲方式,值類型的本身是直接存儲數據;而引用類型是存儲實際數據的引用,程式通過引用查找到真正的數據。

  1、值類型

  值類型只要包括整數類型浮點類型以及布爾類型等,值類型變數直接存儲其數據值,它在記憶體棧中進行分配,因此效率很高,使用值類型主要是為了提高性能。

值類型具有以下特點:

  •值類型變數都存儲在堆棧中;

  •訪問值類型是,一般都是直接訪問其實例;

  •每個值類型變數都有自己的數據副本,因此對一個值類型變數的操作不會影響其他變數;

  •複製值類型變數時,複製的是變數的值,而不是變數的地址;

 

  •值類型變數不能為null,必須具有一個確定的值;

  (1)整數類型

  整數類型代表一種沒有小數點的整數數值,在c#中內置的整數類型如下:

類型

說明

範圍

sbyte

8位有符號整數

-128~127

short

16位有符號整數

-32768~32767

Int

32位有符號整數

-2147483648~2147483647

long

64位有符號整數

-9223372036854775808~9223372036854775807

byte

8位無符號整數

0~127

ushort

16位無符號整數

0~65535

Uint

32位無符號整數

0~4294967295

ulong

64位無符號整數

0~18446744073709551615

  值得註意的是,在使用整數類型時,要確保數值大小,以免發生運算溢出的錯誤。

  (2)浮點類型

  浮點類型變數主要用於處理含有小數的數據,浮點類型主要包括floatdouble兩種數值類型。

類型

說明

範圍

float

精確到7位數

 

double

精確到15~16位數

 

  如果不做任何設置,包含小數點的數值都被認為是double類型,如果要將數值以float類型來處理,通過強制使用fF將其指定為float類型

  如果是要將數值強制指定為double類型,需要使用d或D進行設置:

  (3)布爾類型

  布爾類型主要用來表示true/false,一個布爾類型的值只能是true或者false,不能將其指定為其他類型的值,布爾類型不能與其他類型進行轉換。

  2、引用類型

  引用類型是構建c#引用程式的主要對象類型數據,在應用程式執行的過程中,對象類型以 new創建對象實例,並且存儲在堆棧中。堆棧是一種由系統彈性配置的記憶體空間沒沒有特定的大小以及存活時間,因此可以被彈性地運用於對象的訪問。

  引用類型的特征:

  1、必須在托管堆中為引用類型變數分配記憶體;

  2、必須使用new關鍵字來創建引用類型變數;

  3、在托管堆中分配每個對象都有與之相關的附加成員,這些成員必須被初始化;

  4、引用類型變數是由垃圾回收機制來管理的;

  5、多個引用類型邊浪可以引用同一個對象,這種情況下,對一個變數操作會影響另一個變數所引用的同一個變數;

  6、引用類型被賦值前的值都是null;

  3、值類型與引用類型的區別

  從概念上說,值類型是直接存儲其值的,而引用類型則是存儲對其值的引用,這兩種類型存儲在記憶體的不同地方。在c#中,再設計類型的時候就要決定類型實例的行為,如果系統不能理解應用類型和值類型的區別,將會給代碼帶來不必要的異常。

  從記憶體上看,值類型是在棧中操作的,而引用類型則是在堆中分配記憶體單元。棧在編譯時就分配好記憶體空間,在代碼中有棧的明確定義;而堆是程式運行中動態分配的記憶體空間,可以根據程式的運行情況動態地分配記憶體的大小。因此,值類型總是在記憶體中占用一個預定義的位元組數。而引用類型的變數則在棧中分配一個記憶體空間,這個記憶體空間包含對另一個記憶體位置的引用,這個位置是托管堆中的一個地址,即存放此變數實際值的地方。

  4、枚舉類型

  枚舉類型是一種獨特的值類型,他生命一組具有相同性質的常量。就比如我們編寫與日期相關的引用程式的時候,經常要使用到面、月、星期等日期數據,可以將這些數據組成多個不同名稱的枚舉類型。使用枚舉類型可以增加程式的可讀性和可維護性,同事,也可以避免類型的錯誤。

  特別註意的是,在定義枚舉類型時,如果不對其進行複製,預設情況下,第一個枚舉數的值為0,後面每個枚舉數的值一次遞增1.

  在c#中用關鍵字enum聲明枚舉,形式如下:

 1 enum  枚舉名
 2 
 3   {
 4 
 5     list1=value1,
 6 
 7     list2=value2,
 8 
 9             ...
10 
11             listN=valueN
12 
13         }    
enum聲明

  其中,大括弧中的內容為枚舉值列表,每個枚舉對應一個枚舉值名稱,value1--valueN為整數數據類型,list1--listN則為枚舉值的標識名稱。

  5、類型轉換

  類型轉換就是將一種類型轉換成另一種類型,具體可以分為隱式轉換和顯式轉換兩種方式:
  (1)隱式轉換

  所謂隱式轉換就是不需要聲明就能進行的轉換,進行轉換的時候編譯器不需要進行檢查就能安全的轉換,下麵是可以進行隱式轉換的數據類型:

  從int、uint、long、ulong到float,以及從long或ulong到double的轉換可能導致精度損失,但是不會影響數量級。當一種類型的值轉換為大下相等或更大的一種類型時,發生擴大轉換;當一種類型的值轉換為較小的一種類型時,則發生收縮轉換。

  (2)顯式轉換

  顯式轉換也可以稱為強制轉換,需要在代碼中明確地聲明要轉換的類型。

  (3)裝箱拆箱

  將值類型轉換為引用類型的過程叫做裝箱,相反,將引用類型轉換為值類型的過程稱為拆箱。

  裝箱

  從上面例子可以看出,將值類型變數的值複製到裝箱得到的對象中,裝箱後改變值類型變數的值,並不會影響裝箱對象的值。 

  拆箱

  拆箱操作時要註意要符合類型一直的原則,否則會出現異常。

3、變數操作

  1、聲明變數

  聲明變數就是指定變數的名稱和類型,未經聲明的變數本身是不合法的,因此也沒有辦法在程式中使用。聲明一個變數由一個類型和跟在後面的衣蛾或多個變數組成,多個變數間用逗號隔開,聲明變數以分好結束。

  c#變數名是一種標識符,應該符合標識符的命名規則。變數名區分大小寫,規則如下:

  •變數名只能由數字、字母和下劃線組成;

  •變數名的第一個符號只能是字母和下劃線;

  •不能使用關鍵字作為變數名;

  •如果在一個語句塊中定義了一個變數名,那麼在變數的作用域內不能再定義相同名稱的變數。

  2、變數的作用域

  變數的作用域就是可以訪問該變數的代碼區域,可以通過一下規則確定:

  •只要欄位所屬的類在某個作用域內,其欄位也在該作用域內;

  •局部變數存在於表示聲明該變數的塊語句或者方法結束的封閉花括弧之前的作用域內;

  •在for、while或類似語句中聲明的局部變數存在於該迴圈體內。

  3、變數的賦值

  使用賦值運算符“=”來給變數賦值,將等號右邊的值賦給等號左邊的變數。

4、常量

  常量顧名思義是值固定不變的量,在系統編譯時就已經確定好的,常量使用關鍵字const來創建,並且在創建常量是必須設置它的初始值。常量的類型只能為下列類型之一:sbyte、byte、short、ushort、int、uint、long、ulong、cahr、float、decimal、double、bool、string等。

總結:

  上面重點介紹了變數與常量,重點掌握的是值類型、引用類型和枚舉類型的概念及用法,並且瞭解類型的轉換。掌握如何對變數進行操作,瞭解變數的作用域以及如何給變數賦值,以及常量的基本概念和基本類型。知識點內容不多,都很基礎,但是也是最為重要的一部分知識點,萬丈高樓平地起,我們要掌握好這些基礎的知識點,才能在編程這條路越走越遠,希望這篇文章能給你帶來一定的幫助,謝謝支持!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一個問題 var res = pwDb.Set<WorkInfo>().Where(t => t.WorkTime > startTime && t.WorkTime < endTime); 用大餘小餘就行了,簡單。 第二個問題就麻煩了,資料庫內儲存的時間是含有秒。而js傳過去時間只有日期,而我們 ...
  • wpf 的依賴屬性只能在loaded 事件之後才能取到,在構造函數的 InitializeComponent(); 之後取不到 wpf 的依賴屬性只能在loaded 事件之後才能取到,在構造函數的 InitializeComponent(); 之後取不到 wpf 的依賴屬性只能在loaded 事件之 ...
  • 調用 var reuslt = await _stTrendController.InitalrenderSourceandBrush2((int)firstrowgrid.ActualWidth - 27); ...
  • 一、下載Windows版本Redis 下載鏈接:https://github.com/MSOpenTech/redis/releases(根據系統選擇對應版本) 二、修改預設的配置文件 如上圖兩個配置文件,redis.windows.conf(應用程式配置文件);redis.windows-serv ...
  • 文本框增加驗證選項卡 列表複雜查詢,支持文本框,時間,下拉(如:客戶總表) ...
  • 獲取日期枚舉,可以根據switch去進行操作 ...
  • npoi完整代碼:NET npoi幫助類 ...
  • 本文純乾貨,直接拿走使用,不用付費。在業務開發中,手機號碼驗證是我們常常需要面對的問題,目前市場上各種各樣的手機號碼驗證方式,比如正則表達式等等,本文結合實際業務場景,在業務級別對手機號碼進行嚴格驗證;同時增加可配置方式,方便業務擴展,代碼非常簡單,擴展非常靈活。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...