最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中變量、常量、枚舉、預處理器指令知多少

 更新時間:2017年04月16日 08:30:54   作者:Simen.Net  
這篇文章主要介紹了c#共有其中變量類型有:靜態(tài)變量、實類變量、數(shù)組元素、數(shù)值參數(shù)、引用參數(shù)、輸出參數(shù)和局部變量,需要的朋友可以參考一下

一、變量

C#共有其中變量類型有:靜態(tài)變量、實類變量、數(shù)組元素、數(shù)值參數(shù)、引用參數(shù)、輸出參數(shù)和局部變量

先定義一個簡單的類來說明,如下:

public class VariableDefine
  {
    private static uint variableUInt;
    public static uint VariableUInt { get => variableUInt; set => variableUInt = value; }
    string VariableStr;
    public VariableDefine(string version)
    {
      VariableStr = version;
    }

    public static void Fun()
    {  
      Console.WriteLine(variableUInt);
    }

    /// <summary>
    /// 變量類型
    /// </summary>
    /// <param name="intArray">intArray[0]數(shù)組元素</param>
    /// <param name="a">數(shù)值參數(shù)</param>
    /// <param name="b">引用類型</param>
    /// <param name="c">輸出參數(shù)</param>
    public void Fun(int[] intArray, int a, ref int b, out int c)
    {
      //局部變量i
      var i = 0;
      c = i;
    }
  }

對于靜態(tài)變量在被創(chuàng)建加載之后失效,當被卸載后失效,靜態(tài)變量的初始值也為此類型的變量的默認值

對于實例變量當創(chuàng)建某類的一個實例的時候,隸屬于該類的實例變量也被生成,當不再有關于這個實例的引用而且實例的析構函數(shù)執(zhí)行了以后,此實例變量失效

對于數(shù)組元素當任意一個數(shù)組實例被創(chuàng)建時,這個數(shù)組的元素也被同時創(chuàng)建,當不再有任何正對這個數(shù)組實例的引用時,它的元素也就此失效

當一個不帶有ref 或out 修飾參數(shù)被聲明時,我們稱它為數(shù)值參數(shù)

參數(shù)當一個帶有ref 修飾語的參數(shù)被聲明時,我們稱之為引用參數(shù)

參數(shù)當一個帶有out 修飾語的參數(shù)被聲明時,我們稱之為輸出參數(shù)

局部變量被局部變量聲明語句創(chuàng)建

C#編譯器不容許在表達式中使用未初始化的變量

變量初始化要注意兩點的是:(1)變量是類或結構中的字段,如果沒有顯示初始化,創(chuàng)建這些變量時,其默認值就是0(2)方法的局部變量必須在代碼中顯示初始化,之后才能在語句中使用它們的值。

二、常量

C#可以定義兩種類型的常量,靜態(tài)常量用const來定義在程序編譯的時候確定,一種是動態(tài)常量用readonly來定義在運行時確定

靜態(tài)常量使用方便,性能高,但一旦定義之后就不可以改變,在一個引用第三方程序集上面如果定義了一個靜態(tài)常量,當它定義的值改變時你不得不重新引用生成主程序

動態(tài)常量使用靈活,能很好的支持程序的擴展性

下面一個事例就是通過讀取XML文檔來給動態(tài)常量賦值

public sealed class ReadOnlyModel
  {
    public readonly List<Company> ListCompany;
    public ReadOnlyModel(string companyInfoPath)
    {
      XElement companys = XElement.Load(companyInfoPath);
      var elements = from e in companys.Elements("company")
              where e.Element("name").Value.Equals("C#")
              select e;
      ListCompany = GetListCompany(elements);
    }

    /// <summary>
    /// 解析xml文檔
    /// </summary>
    /// <param name="elements"></param>
    /// <returns></returns>
    private List<Company> GetListCompany(IEnumerable<XElement>elements)
    {
      var listCompany = new List<Company>();
      foreach (var element in elements)
      {
        var companyModel = new Company()
        {
          CompanyName = element.Element("name").Value,
          CompanyEmail = element.Element("email").Value
        };
        listCompany.Add(companyModel);
      }
      return listCompany;
    }
  }

根據(jù)傳入的路徑來解析XML文件賦值給動態(tài)常量,能很好的擴展應用程序的常量值

三、枚舉

枚舉是用戶定義的整數(shù)類型,在聲明一個枚舉時,要指定該枚舉的實例可以包含的一組可以接受的值,枚舉具有如下的優(yōu)勢:

1.枚舉可以使代碼更易于維護,有助于確定給變量指定合法的,期望的值

2.枚舉使代碼更清晰,允許用描述性的名稱來表示整數(shù),而不是含義模糊、變化多端的數(shù)

3.枚舉也是代碼更易于輸入

在實際應用中通常在枚舉上面加上Description需要顯示的枚舉特性值,在頁面顯示的時候通常顯示的也是枚舉的特性值,所以有必要寫一個獲取枚舉特性值的通用方法

class Program
  {
    static void Main(string[] args)
    {
      //ReadOnlyModel readOnlyCompany = new ReadOnlyModel(@"D:\GitHubProject\C#AdvancedProgramming\VariableDefine\VariableDefine\bin\Debug\Test-Parking-SN.xml"); //C:\Program Files(x86)\FPOnline
      //foreach (var company in readOnlyCompany.ListCompany)
      //{
      //  Console.WriteLine("company name is {0} company email is {1}", company.CompanyName, company.CompanyEmail);
      //}
      //Console.WriteLine("company name is {0} company email is {1}", ConstClass.CompanyName, ConstClass.CompanyEmail);
      MemberLevel superMember = MemberLevel.SuperMember;
      Console.WriteLine(superMember.GetDescriptionEnum());
      Console.ReadKey();
    }
  }

  public enum MemberLevel
  {
    [Description("超級會員")]
    SuperMember=1,
    [Description("一般會員")]
    Member=2,
    [Description("普通用戶")]
    GeneralUser=3
  }

  public static class EnumExtension
  {
    public static string GetDescriptionEnum(this Enum enumValue)
    {
      DescriptionAttribute attr = null;
      var enumType = enumValue.GetType();
      string name = Enum.GetName(enumType, enumValue);
      if (name != null)
      {
        FieldInfo fieldInfo = enumType.GetField(name);
        if (fieldInfo != null)
          attr = Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute), false) as DescriptionAttribute;
      }
      if (attr != null && !string.IsNullOrEmpty(attr.Description))
        return attr.Description;
      else return string.Empty;
    }
  }

參考博客:枚舉知多少

四、C#的預處理指令

使用預處理指令可以禁止編譯器編譯與額外功能相關的代碼,以控制不同版本擁有的功能,如企業(yè)版和基本版本

#define(給定名稱的符號)和#undef(刪除名稱的符號)一般與#if、#elif、#else、#endif結合起來使用如

沒有找到預定義的Debug就不會執(zhí)行 #if和#endif代碼塊里面的語句,這也稱為條件編譯。

同樣的預處理器指令有:#warning和#error,當編譯器遇到它們時,會分別產生警告或錯誤,如果編譯器遇到#warning指令,會給用戶顯示#warning后面的文本,之后編譯繼續(xù),如果編譯器遇到#error指令,就會給用戶顯示后面的文本,作為一條編譯錯誤消息,然后立即退出編譯。

#region和#endregion指令用于把一段代碼標記為有給定名稱的一個塊,#line指令用于改變編譯器在警告和錯誤信息中顯示的文件名和行號信息,#pragm可以印制或還原指定的編譯警告參考:https://msdn.microsoft.com/zh-cn/library/yt3yck0x.aspx

相關文章

  • C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼

    C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼

    這篇文章主要介紹了C# 循環(huán)判斷會進來幾次的實現(xiàn)代碼,代碼中就一個循環(huán),循環(huán)的判斷是從一個函數(shù)獲取值,需要的朋友可以參考下
    2018-06-06
  • C# IQueryable及IEnumerable區(qū)別解析

    C# IQueryable及IEnumerable區(qū)別解析

    這篇文章主要介紹了C# IQueryable及IEnumerable區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • C#自動生成漂亮的水晶效果頭像的實現(xiàn)代碼

    C#自動生成漂亮的水晶效果頭像的實現(xiàn)代碼

    這篇文章主要介紹了C#自動生成漂亮的水晶效果頭像的實現(xiàn)代碼,有需要的朋友可以參考一下
    2013-12-12
  • C#中的==運算符

    C#中的==運算符

    這篇文章主要介紹了C#中的==運算符,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • 利用C#驗證哥德巴赫猜想的示例代碼

    利用C#驗證哥德巴赫猜想的示例代碼

    哥德巴赫猜想(Goldbach’s?Conjecture)是數(shù)學領域的一個著名猜想,大致內容為任何一個大于2的偶數(shù)都可以表示為兩個質數(shù)之和,下面我們就來看看如何利用C#驗證這一猜想呢
    2024-03-03
  • C# 使用GDI繪制雷達圖的實例

    C# 使用GDI繪制雷達圖的實例

    這篇文章主要介紹了C# 使用GDI繪制雷達圖,本文通過一段實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 詳解C#App.config和Web.config加密

    詳解C#App.config和Web.config加密

    本篇文章給大家分享了C#App.config和Web.config加密的相關知識點以及具體代碼步驟,有興趣的朋友參考學習下。
    2018-05-05
  • C#中的Hangfire和Quartz.NET 任務調度的區(qū)別解析

    C#中的Hangfire和Quartz.NET 任務調度的區(qū)別解析

    Hangfire 和 Quartz.NET 是兩種常見的 C# 任務調度庫,它們有不同的特點和使用場景,本文給大家介紹C#中的Hangfire和Quartz.NET 任務調度的區(qū)別,感興趣的朋友一起看看吧
    2024-08-08
  • C#簡單了解接口(Interface)使用方法

    C#簡單了解接口(Interface)使用方法

    這篇文章主要介紹了C#簡單了解接口(Interface)使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • C#使用符號表實現(xiàn)查找算法

    C#使用符號表實現(xiàn)查找算法

    本文詳細講解了C#使用符號表實現(xiàn)查找算法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論

奉新县| 页游| 临沭县| 安西县| 嘉峪关市| 芮城县| 寻甸| 香格里拉县| 正宁县| 宕昌县| 靖宇县| 射阳县| 荃湾区| 儋州市| 常山县| 黔西| 康马县| 平和县| 治县。| 昭平县| 正定县| 永春县| 肇源县| 嫩江县| 盘锦市| 奉贤区| 普安县| 枣强县| 新干县| 永康市| 桓仁| 诏安县| 新沂市| 保德县| 乌苏市| 炉霍县| 德兴市| 青河县| 开封市| 南京市| 东港市|