zoukankan      html  css  js  c++  java
  • 核心C#——C#高级编程第二章

      注:本文主要给不熟悉C#的,或想加深C#基础知识的人阅读,如果是技术牛人,请绕行,以免耽误您的宝贵时间。

      使用C#要先弄明白一下知识:声明变量、变量的初始化和作用域、C#的预定义数据类型、在C#程序中使用条件语句、循环语句和跳转语句指定执行流、枚举、名称空间、Main()方法、基本命令行C#编译器选项、使用System.Console执行控制台I/O、使用内部注释和文档编制功能、预处理器指令、C#编程的推荐规则和约定。C#的基础知识是后面使用C#开发程序的基础,阅读完本章后,读者就有足够的C#知识编写简单的程序了,但还不能使用继承等面向对象特征,这些内容将在以后介绍。

    一、简单的C#程序

      1.在文本编辑器中输入下面的代码,保存为后缀名为.cs的文件,如保存为:First.cs。

     1 using System;
    2
    3 namespace Wrox
    4 {
    5 public class MyFirstClass
    6 {
    7 static void Main()
    8 {
    9 Console.WriteLine("Hello World!");
    10 Console.ReadLine();
    11 return;
    12 }
    13 }
    14 }

      2.对源文件运行C#命令行编译器(csc.exe),编译这个程序:csc First.cs 此时就会在相应目录下生成First.exe文件,双击该文件即在编辑器中显示Hello World!

    二、变量

    1.在C#中声明变量使用下面的语法:datetype identifier,如int i;声明了int变量i,编译器不允许在表达式中使用这个变量,除非用一个值初始化这个变量。

    2.声明i之后,就可以使用赋值运算符(=)给他赋值:i=10;还可以在一行代码中声明变量并且赋值:int i =20;

    3.可以在一条语句中声明和初始化多个相同类型的变量:int i=1,j=2;

    4.类型推断(type inference)使用var关键字,这时编译器可以根据变量的初始值推断变量的类型。如:var someNum=100;等价于int someNum=100;

    变量一旦声明确定类型之后就不能改变类型了,就必须遵循其他变量类型遵循的强类型化规则。

    5.变量的作用域是可以访问该变量的代码区域,一旦出去该区域,该变量就不可以在使用。

    6.常量是其值在使用过程中不会发生变化的变量,在变量的前面加上关键字const,就可以把该变量指定为一个常量。const int a = 100;

      常量必须在声明时初始化;

      常量的值必须能在编译时用于计算,不能从一个变量中提取的值初始化常量;如果这样做请使用只读字段;

      常量总是静态的,注意不可以用static修饰const常量。

    三、预定义数据类型

    1.值类型和引用类型:从概念上看,区别是值类型直接存储其值,应用类型存储对值的引用。

    2.CTS类型:在C#声明一个int类型时,实际上是.Net结构的System.Int32的一个实例。

    3.预定义值类型:内置的CTS值类型表示基本类型,如整形、浮点型、字符型和布尔类型。

    如:sbyte-System.SByte,short-System.Int16,int-System.Int32,long-System.Int64,byte-System.Byte,ushort-System.UInt16,uint-System.UInt32,ulong-System.UInt64,float-System.Single,double-System.Double,decimal-System.Decimal,bool-System.Boolen,char-System.Char。

    4.预定义的引用类型:

    object-System.Object是所有类型的基类型,所有其他的类型都是从object直接或间接继承而来;

    string-System.String。

    四、流控制--控制流程语句

    1.条件语句:if..else;switch..case语句;

    2.循环语句:for循环;while循环;do..while循环;foreach循环;

    3跳转语句:goto语句;break语句;continue语句;return语句;

    五、枚举--用enum修饰

      枚举是用户定义的整数类型,创建枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值,枚举使代码更清晰,允许用描述性的名称表示整数值。简单应用如下:

     1 class EnumExample
    2 {
    3 public enum TimeOfDay
    4 {
    5 Morning=0,
    6 Afternoon=1,
    7 Evening=2
    8 }
    9 public static int Main()
    10 {
    11 WriteGreeting(TimeOfDay.Morning);
    12 return 0;
    13 }
    14
    15 static void WriteGreeting(TimeOfDay timeOfDay)
    16 {
    17 switch(timeOfDay)
    18 {
    19 case TimeOfDay.Morning:
    20 Console.WriteLine("Good Morning");
    21 break;
    22 case TimeOfDay.Afternoon:
    23 Console.WriteLine("Good Afternoon");
    24 break;
    25 case TimeOfDay.Evening:
    26 Console.WriteLine("Good Evening");
    27 break;
    28 defult:
    29 Console.WriteLine("hello!");
    30 break;
    31 }
    32 }
    33 }

      C#枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构,表示可以对它们调用方法,执行有用的任务。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。

      可以从字符串中获取枚举值,请看下面一段代码:

    1 TimeOfDay time = (TimeOfDay)Enum.Parse(typeof(TimeOfDay),"afternoon",true);
    2 Console.WriteLine((int)time);

    这样就会返回1,Enum.Parse()方法实现从字符串中获取枚举值,并转化为整数。Enum.Parse()的第一个参数是要使用的枚举类型,第二个参数是要转换的字符串,第三个参数指定转换时是否忽略大小写。

    六、名称空间

      名称空间提供了一种组织相关类和其他类型的方式,与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。名称空间以句点(.)隔开,最后是类名。如:System.Date.DbHelp。命名空间通过Using语句引入。如:Using System.Date;

    七、Main()方法

      C#程序是从方法Main()开始执行的,这个方法必须是类或结构的静态方法,并且其返回值必须是int或void,Main()方法要么不带参数,要么是string类型的数组(string[] args)。我们给入口点方法指定什么级别并不重要,即使把该方法标记为private,它也可以运行。

    八、控制台I/O

    Console.Write();Console.WriteLine();注意可以添加一个格式字符串以及一个可选的精度值,主要格式字符串有C:本地货币格式,D:十进制格式,E:科学计数法(e的大小写确定指数符号的大小写),F:固定点格式,G:普通格式,N:用逗号表示千分符,P:百分数格式,X:十六进制格式。如下输出为:¥940.23,¥940.2,¥940.2300。

    1  decimal i=940.23m;
    2 Console.WriteLine("{0:c}",i);
    3 Console.WriteLine("{0:c1}",i);
    4 Console.WriteLine("{0:c4}",i);

    还有一个技巧是,可以使用占位符来代替这些格式字符串,如下输出为:.23。

    1 double d = 0.234;
    2 Console.WriteLine("{0:#.00}",d);

    因为如果在符号(#)的位置上没有字符,就会忽略该符号,如果在0的位置上有一个字符,就用这个字符代替0,否则显示0。

    九、使用注释

    1.//This is a singleline comment

    2./*This comment

     spans multiple lines*/

    3.XML文档:通过///可以把包含类型和类型成员的文档说明的XML标记放在代码中。

    十、C#预处理指令:以#开头,不会转化为可执行代码中的命令,但是会影响编译过程的各个方面。

    1.#define、#undef告诉编译器存在或删除给定名称的符号,通常和#if一起使用;

    2.#if、#elif、#else、#endif告诉编译器是否要编译某个代码块,如:

    1 int DoSomeWork(double x)
    2 {
    3 #if DEBUG
    4 Console.WriteLine("x is "+x);
    5 #endif
    6 }

    这段代码会像往常那样执行,但Console.WriteLine命令包含在#if字句中,只有在前面的#define命令定义了符号DEBUG后才执行。当编译器遇到#if语句后,会先检查相关符号是否存在,如果存在,就编译#if字句中的代码。否则,编译器会忽略所有的代码,知道遇到匹配的#endif指令为止。

    3.#warning,#error:编译器遇到它们时会分别产生警告和错误,如果编译器遇到@warning指令,会给用户显示@warning指令后面的文本,之后编译继续进行。如果编译器遇到#error指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译,不会生成IL代码。
    4.#region,#endregion:用于把一段代码标记为有给定名称的一个块。

    5.#line:可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。

    6.#pragma:可以抑制或还原指定的编译警告。#pragma指令可以在类或方法级别执行,下面例子禁止“字段未使用”警告,然后在编译MyClass类后还原该警告。

    1 #pragma warning disable 169
    2 public class MyClass
    3 {
    4 int neverUsedField;
    5 }
    6 #pragma warning restore 169

    十一、C#编程规则

    1.标识符的规则:标识符是给变量、用户自定义类型和这些类型的成员指定的名称,标识符区分大小写,C#中的标识符有两条规则:首字符必须为字母或下划线,不能把C#关键字用作标识符。

    C#保留关键字有很多这里不再列举,如果需要把某一保留字用作标识符,可以在标识符前面加上前缀符号@,告知编译器其后的内容是一个标识符,而不是C#关键字,即class不是有效标识符,而@class是有效标识符。

    标识符也可以包含Unicode字符,用语法\uXXXX来指定,如\u005fdentifier是有效标识符。

    2.用法约定:任何一种开发语言都有一些传统的编程风格,是一种约定。

    在许多情况下,名称都应使用PascaI大小写形式,Pascal大小写形式指名称中单词的首字母大写,如EmployeeSalary,类型中所有私有成员字段的名称都应是camel大小写形式,camel大小写形式
    指名称中除首个单词外的单词首字母大写。如employeeSalary。

  • 相关阅读:
    创建FLASK,同步docker
    FLASK Buleprint
    restful api
    Angular JS
    线程日志
    将项目部署到linux下的docker容器中
    安装和卸载docker
    学习目录总编
    Ansible
    装饰器
  • 原文地址:https://www.cnblogs.com/PaulMa/p/2245528.html
Copyright © 2011-2022 走看看