C#筆記2 —常量


基本上和c語言中的常量類似,但有區別
在const關鍵字的基礎上,添加了readonly,readonly關鍵字在筆記中說明。

常量是固定值,程序執行期間不會改變。常量可以是任何基本數據類型,比如整數常量、浮點常量、字符常量或者字符串常量,還有枚舉常量。
常量可以被當作常規的變量,只是它們的值在定義後不能被修改。
整數常量、浮點常量、字符常量和c語言基本類似,這裏就不詳細展開
字符串常量稍有不同:
字符串常量是括在雙引號 "" 裏,或者是括在 @"" 裏。字符串常量包含的字符與字符常量相似,可以是:普通字符、轉義序列和通用字符

使用字符串常量時,可以把一個很長的行拆成多個行,可以使用空格分隔各個部分。

這裏是一些字符串常量的實例。下面所列的各種形式表示相同的字符串。

string a = "hello, world";                  // hello, world
string b = @"hello, world";               // hello, world
string c = "hello \t world";               // hello     world
string d = @"hello \t world";               // hello \t world
string e = "Joe said \"Hello\" to me";      // Joe said "Hello" to me
string f = @"Joe said ""Hello"" to me";   // Joe said "Hello" to me
string g = "\\\\server\\share\\file.txt";   // \\server\share\file.txt
string h = @"\\server\share\file.txt";      // \\server\share\file.txt
string i = "one\r\ntwo\r\nthree";
string j = @"one                //說明可以換行
two
three";

然後c#中還有string類型,和c++類似的。c語言只有字符數組,string類型操作起來靈活很多,c++中string類型操作也是非常靈活的。

定義常量
常量是使用 const 關鍵字來定義的 。定義一個常量的語法如下:

const <data_type> <constant_name> = value;
下面的代碼演示瞭如何在程序中定義和使用常量:

實例
using System;

public class ConstTest
{
    class SampleClass
    {
        public int x;
        public int y;
        public const int c1 = 5;
        public const int c2 = c1 + 5;

        public SampleClass(int p1, int p2)
        {
            x = p1;
            y = p2;
        }
    }

    static void Main()
    {
        SampleClass mC = new SampleClass(11, 22);
        Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
        Console.WriteLine("c1 = {0}, c2 = {1}",
                          SampleClass.c1, SampleClass.c2);
    }
}
當上面的代碼被編譯和執行時,它會產生下列結果:

x = 11, y = 22
c1 = 5, c2 = 10

筆記:
1、Convert.ToDouble 與 Double.Parse 的區別。實際上 Convert.ToDouble 與 Double.Parse 較爲類似,實際上 Convert.ToDouble內部調用了 Double.Parse:

(1)對於參數爲null的時候:
 Convert.ToDouble參數爲 null 時,返回 0.0;
 Double.Parse 參數爲 null 時,拋出異常。
 
(2)對於參數爲""的時候:
 Convert.ToDouble參數爲 "" 時,拋出異常;
 Double.Parse 參數爲 "" 時,拋出異常。
 
(3)其它區別:
 Convert.ToDouble可以轉換的類型較多;
 Double.Parse 只能轉換數字類型的字符串。
 Double.TryParse 與 Double.Parse 又較爲類似,但它不會產生異常,轉換成功返回 true,轉換失敗返回 false。最後一個參數爲輸出值,如果轉換失敗,輸出值爲 0.0。
附測試代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //string a = "0.2";
                //string a = null;
                string a = "";
                try
                {
                    double d1 = Double.Parse(a);
                }
                catch (Exception err)
                {
                    Console.WriteLine("d1轉換出錯:" + err.Message);
                }

                try
                {
                    double d2 = Convert.ToDouble(a);
                }
                catch (Exception err)
                {
                    Console.WriteLine("d2轉換出錯:" + err.Message);

                }
                try
                {
                    double d3;
                    Double.TryParse(a,out d3);
                }
                catch (Exception err)
                {
                    Console.WriteLine("d3轉換出錯:" + err.Message);
                }
            }
            finally
            {
                Console.ReadKey();
            }

        }
    }
}
運行結果:
d1轉換出錯:輸入字符串的格式不正確。
d2轉換出錯:輸入字符串的格式不正確。

代碼中的try catch可以在錯誤的時候拋出異常,和c++類似,中是c語言所沒有的機制

2.Convert.ToInt32() 與 int.Parse() 的區別

沒搞清楚Convert.ToInt32和int.Parse()的細細微區別時千萬別亂用,否則可能會產生無法預料的結果,舉例來說:假如從url中取一個參數page的值,我們知道這個值是一個int,所以即可以用Convert.ToInt32(Request.QueryString["page"]),也可以用,int.Parse(Request.QueryString["page"]),但是如果page這個參數在url中不存在,那麼前者將返回0,0可能是一個有效的值,所以你不知道url中原來根本就沒有這個參數而繼續進行下一下的處理,這就可能產生意想不到的效果,而用後一種辦法的話沒有page這個參數會拋出異常,我們可以捕獲異常然後再做相應的處理,比如提示用戶缺少參數,而不是把參數值當做0來處理。

(1)這兩個方法的最大不同是它們對null值的處理方法:

Convert.ToInt32(null)會返回0而不會產生任何異常,但int.Parse(null)則會產生異常。

(2)對數據進行四捨五入時候的區別

a. Convert.ToInt32(double value)

如果 value 爲兩個整數中間的數字,則返回二者中的偶數;即 3.5轉換爲4,4.5 轉換爲 4,而 5.5 轉換爲 6。 不過4.6可以轉換爲5,4.4轉換爲4

b. int.Parse("4.5")

直接報錯:"輸入字符串的格式不正確".

c. int(4.6) = 4

Int轉化其他數值類型爲Int時沒有四捨五入,強制轉換

(3)對被轉換類型的區別

int.Parse 是轉換 String爲int

Convert.ToInt32是轉換繼承自Object的對象爲int的(可以有很多其它類型的數據).

你得到一個object對象,你想把它轉換爲int,用int.Parse就不可以,要用Convert.ToInt32.


1.靜態常量(編譯時常量)const
在編譯時就確定了值,必須在聲明時就進行初始化且之後不能進行更改,可在類和方法中定義。定義方法如下:

const double a=3.14;// 正確聲明常量的方法
const int b;         // 錯誤,沒有初始化

2.動態常量(運行時常量)readonly
在運行時確定值,只能在聲明時或構造函數中初始化,只能在類中定義。定義方法如下:

class Program
{
    readonly int a=1;  // 聲明時初始化
    readonly int b;    // 構造函數中初始化
    Program()
    {
        b=2;
    }
    static void Main()
    {
    }
}

在下面兩種情況下:
 a、取值永久不變(比如圓周率、一天包含的小時數、地球的半徑等)。
 b、對程序性能要求非常苛刻。
可以使用 const 常量,除此之外的其他情況都應該優先採用 readonly 常量。

關於常量變量命名的規則:
帶有 private 私有訪問修飾符的常量通常要以駱駝命名法命名,即以下劃線開頭,第一個單詞的首字母小寫,餘下單詞首字母大寫。

private const string _bookName = "新華字典";
帶有 public 公共修飾符、protected 受保護修飾符等的常量要以帕斯卡命名法命名,即各個單詞首字母都要大寫。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章