一、变量

C#共有其中变量类型有:静态变量、实类变量、数组元素、数值参数、引用参数、输出参数和局部变量

先定义一个简单的类来说明,如下:

 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]数组元素</param>
/// <param name="a">数值参数</param>
/// <param name="b">引用类型</param>
/// <param name="c">输出参数</param>
public void Fun(int[] intArray, int a, ref int b, out int c)
{
//局部变量i
var i = ;
c = i;
}
}

对于静态变量在被创建加载之后失效,当被卸载后失效,静态变量的初始值也为此类型的变量的默认值

对于实例变量当创建某类的一个实例的时候,隶属于该类的实例变量也被生成,当不再有关于这个实例的引用而且实例的析构函数执行了以后,此实例变量失效

对于数组元素当任意一个数组实例被创建时,这个数组的元素也被同时创建,当不再有任何正对这个数组实例的引用时,它的元素也就此失效

当一个不带有ref 或out 修饰参数被声明时,我们称它为数值参数

参数当一个带有ref 修饰语的参数被声明时,我们称之为引用参数

参数当一个带有out 修饰语的参数被声明时,我们称之为输出参数

局部变量被局部变量声明语句创建

C#编译器不容许在表达式中使用未初始化的变量

变量初始化要注意两点的是:(1)变量是类或结构中的字段,如果没有显示初始化,创建这些变量时,其默认值就是0(2)方法的局部变量必须在代码中显示初始化,之后才能在语句中使用它们的值。

二、常量

C#可以定义两种类型的常量,静态常量用const来定义在程序编译的时候确定,一种是动态常量用readonly来定义在运行时确定

静态常量使用方便,性能高,但一旦定义之后就不可以改变,在一个引用第三方程序集上面如果定义了一个静态常量,当它定义的值改变时你不得不重新引用生成主程序

动态常量使用灵活,能很好的支持程序的扩展性

下面一个事例就是通过读取XML文档来给动态常量赋值

 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;
}
}

根据传入的路径来解析XML文件赋值给动态常量,能很好的扩展应用程序的常量值

三、枚举

枚举是用户定义的整数类型,在声明一个枚举时,要指定该枚举的实例可以包含的一组可以接受的值,枚举具有如下的优势:

1.枚举可以使代码更易于维护,有助于确定给变量指定合法的,期望的值

2.枚举使代码更清晰,允许用描述性的名称来表示整数,而不是含义模糊、变化多端的数

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=,
[Description("一般会员")]
Member=,
[Description("普通用户")]
GeneralUser=
} 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;
}
}

参考博客:http://www.cnblogs.com/xiaofeixiang/p/3872142.html枚举知多少

四、C#的预处理指令

使用预处理指令可以禁止编译器编译与额外功能相关的代码,以控制不同版本拥有的功能,如企业版和基本版本

#define(给定名称的符号)和#undef(删除名称的符号)一般与#if、#elif、#else、#endif结合起来使用如

没有找到预定义的Debug就不会执行 #if和#endif代码块里面的语句,这也称为条件编译。

同样的预处理器指令有:#warning和#error,当编译器遇到它们时,会分别产生警告或错误,如果编译器遇到#warning指令,会给用户显示#warning后面的文本,之后编译继续,如果编译器遇到#error指令,就会给用户显示后面的文本,作为一条编译错误消息,然后立即退出编译。

#region和#endregion指令用于把一段代码标记为有给定名称的一个块,#line指令用于改变编译器在警告和错误信息中显示的文件名和行号信息,#pragm可以印制或还原指定的编译警告参考:https://msdn.microsoft.com/zh-cn/library/yt3yck0x.aspx

C#变量、常量、枚举、预处理器指令知多少的更多相关文章

  1. Docs-.NET-C#-指南-语言参考-预处理器指令:#define(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#define(C# 参考) 1.返回顶部 1. #define(C# 参考) 2018/06/30 使用 #define 来定 ...

  2. Docs-.NET-C#-指南-语言参考-预处理器指令:#if 预处理指令

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#if 预处理指令 1.返回顶部 1. #if(C# 参考) 2018/06/30 如果 C# 编译器遇到 #if 指令,最终是 ...

  3. 尽量用类型化的常量替代预处理器的 #DEFINE 方法

    类型化常量 (TYPED CONSTANTS) #define ANIMATION_DURATION 0.3 这是一个预处理器指令,当编译器在代码中发现有 ANIMATION_DURATION 时,就 ...

  4. C#预处理器指令 ,你造吗??? (●'◡'●)

    什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...

  5. C#预处理器指令

    在C#中有许多名为“预处理指令”的命令,这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面.例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基本 ...

  6. 一些C#预处理器指令

    像C语言一样,C#有一些预处理器指令的命令.例如,#if#end if,#define等,所谓这些命令是指不会转化为可执行代码中的一些命令,只是在编译的过程中起作用.下面简要介绍一下:1 .#defi ...

  7. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  8. C#中的预处理器指令

    C#中有许多名为“预处理器指令”的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面. 例如,使用预处理器指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,即基 ...

  9. C#预处理器指令【转】

    本文转载自:http://www.cnblogs.com/miffylf/p/4005223.html C#有许多名为预处理器指令的命令.这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各 ...

随机推荐

  1. Java基础之路(一)下--引用数据类型之数组

    上次我们说了java的基础数据类型,今天我们就来说一下引用数据类型中的数组. 什么是数组 数组:存储在一个连续的内存块中的相同数据类型(引用数据类型)的元素集合. 数组中的每一个数据称之为数组元素,数 ...

  2. java线程学习(二)

    多个线程并发抢占资源是,就会存在线程并发问题,造成实际资源与预期不符合的情况.这个时候需要设置"资源互斥". 1.创建资源,这个地方我创建了一个资源对象threadResource ...

  3. Bug记载1之webpack本地安装

    当我安装前端打包工具webpack时,cmd命令出现了这么一句关键性的提示: npm ERR ! Refusing to install package as a dendency of itself ...

  4. 1088: [SCOI2005]扫雷Mine

    1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 979[Submit][Sta ...

  5. 3732: Network

    3732: Network Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 395  Solved: 179[Submit][Status] Descr ...

  6. SEO-友情链接注意事项

    为什么要专门给友链一个区域呢?由此就可以想象到友情链接对一个网站有多重要前期,网站没有权重的时候,跟别人换友链,人家基本是不会换的因为你网站没权重,加了友链他也获取不到权重,对网站没有多少好处一般我们 ...

  7. python中try except处理程序异常的三种常用方法

    如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序: try: 语句1 语句2 . . 语句N except .........: do somet ...

  8. WCF请求数据:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。

    通常情况下,写好WCF服务后都会用自带的WCFClient工具进行测试,在进行时数据请求的时候,如果返回数据量超过默认接收值的时候就会提示如图异常错误. 错误也提示的很清楚,无非就是修改接收值大小的问 ...

  9. 图解Javascript——变量对象和活动对象

    span { line-height: 1.5 } 这是由一段代码引发的思考: var laterDeclaredVar = 'I am a global variable ...'; (functi ...

  10. 阿里云Linux启动tomcat并能外网访问

    问题描述: 先描述一下我的心路历程吧,新买了阿里云服务器,由于需求不是很大,只是为了备案,所以买了个最低配的,而且是Windows server2012的.那现在需要做的是在这个乞丐版的server上 ...