本文讲述了C#基本语法介绍!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
一.基础语法
1.C#区分大小写,所以myVar和MyVar是两个不同的变量。
2.每个C#可执行文件(如控制台应用程序,Windows应用程序和Windows服务)都必须有一个入口点————Main()(M大写)
1 2 3 4 | public static void Main() { //do something } |
在程序启动时调用这个方法。该方法要么没有返回值(void),要么返回一个整数(int)
1.编译器不允许在表达式中使用未初始化的变量。如果变量是类或结构中的字段,如果没有初始化,创建这些变量时,其默认值就是0。
2.类型推断
类型推断(type inference)使用var关键字。编译器可以根据变量的初始化值“推断”变量的类型。var somenum = 0;即使somenum从来没有声明为int,编译器也可以确定,只要somenum在其作用域内,就是一个int.声明了变量,推断出了类型后,就不能改变变量类型了。变量的类型确定后,就遵循其它变量类型遵循的强类型化规则。
3.变量的作用域
变量的作用域是访问该变量的代码区域。只要变量的作用域是程序的不同部分就不会有问题。
(1).局部变量的作用域冲突
1 2 3 4 5 6 7 8 9 | public static int Main() { int j =20; for(int i=0;i<20;i++) { int j = 30; // do something } } |
编译时会报错,因为在Main()方法作用域内有两个变量j,编译器无法区分这两个变量。
(2).字段和局部变量的作用域冲突
某些情况下可以区分名称相同,作用域相同的两个标识符。原因是C#在变量之间有一个基本的区分,它把在类级别声明的变量看作字段,而把在方法中声明的变量看作局部变量。
1 2 3 4 5 6 7 8 9 10 | class Program { int j = 20; static void Main(string[] args) { int j = 30; Console.WriteLine(j); Console.ReadKey(); } } |
虽然在Main()方法的作用域内声明了两个j,这段代码也会编译。在类级别上定义的j,在该类删除前是不会超出作用域的,在Main()中声明的j隐藏了同名的类级别变量,所以运行代码时会显示30.
顾名思义,常量是其值在使用过程中不会发生改变的变量。在声明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一个常量:const int a =100;
常量的特点;
使用常量的好处:
C#认可的基本预定义类型并没有内置于C#语言中,而是内置于.NET Framework中。
例如,在C#中声明一个int类型的数据时,声明的实际上是.NET结构System.Int32的一个实例。这表示在语法上,可以把所有的基本数据类型看成支持某些方法的类。
把int i 转化为string, string s = i.ToString();
在这种便利的语法背后,类型实际上仍存储为基本类型。基本类型在概念上用.NET 结构表示,所以没有性能损失。
C#有15个预定义类型,string,object是引用类型。
1 2 3 4 5 6 | public enum TimeDay { Morning=0, Afternoon = 1, Evening=2 } |
1.枚举是用户定义的整数类型。
2.从长远来看,创建枚举可以节省大量时间,减少许多麻烦。使用枚举比使用整数的优势:
3.在C#中,枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构。这表示可以对它们调用方法,执行有用的任务。
1 2 | TimeDay td =TimeDay.Afternoon; Console.WriteLine((td.ToString()); |
注意因为.NET Framework的执行方式,在语法上把枚举当成结构不会造成性能损失。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。
4.从字符串中获取枚举值
1 2 | TimeDay td = (TimeDay)Enum.Parse(typeof(TimeDay),"afternoon",true); Console.WriteLine((int)td); |
要从字符串中转换,需要使用静态方法Enum.Parse,第一个参数是要使用的枚举类型,第二个是要转换的字符串,第三个是指定在转换时是否忽略大小写。
Enum.Parse方法实际上返回一个对象引用(一个字符串)————我们需要把这个字符串显示转换为需要的枚举类型(是一个拆箱操作)。
如果名称空间的名称很长,又要在代码中多次引用,但不希望该名称空间的名称包含在using指令中(例如,避免类名冲突),就可以给
该名称空间指定一个别名:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | using System.Text; using System.Threading.Tasks; namespace Wrox.ProC.basic { class NameSpaceEx { } } namespace ConsoleApplication1 { using Intro = Wrox.ProC.basic;//给Wrox.ProC.basic指定别名Intro class Program { static void Main(string[] args) { Intro::NameSpaceEx nex = new Intro.NameSpaceEx();//实例化NameSpaceEx对象,要使用::修饰符 } } } |
C#程序是从Main()方法开始执行的,这个方法必须是类或结构的静态方法,并且其返回类型必须是int或void。
在编译C#控制台或Windows应用程序时,默认情况下,编译器会在类中查找与上述签名匹配的Main()方法,并使这个类方法称为程序的入口。
如果有多个Main()方法,编译器就会报错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | namespace Wrox { class Client { public static int Main() { MathEx.Main(); return 0; } } class MathEx { static int Add(int x,int y) { return x+y; } public static int Main() { int i = Add(5,10); return i; } } } |
但是可以使用/main选项,后跟Main()方法所属类的全名(包括名称空),明确告诉编译器把哪个方法作为程序的入口:
csc ConsoleApplication1.cs /main:Wrox.MathEx
在调用程序时,可以让CLR包含一个参数,将命令行参数传递给程序。这个参数是一个字符串数组,传统上称为args(但C#可以接受任何名称)。
1 2 3 4 5 6 7 8 9 10 11 | class Program { static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { Console.WriteLine(args[i]); } } } |
使用命令行就可以编译这段代码。
1 2 3 4 | ConsoleApplication1 a b c a b c |
C#预处理器指令不会转化为可执行代码中的命令,但会影响编译过程的各个方面。例如,使用C#预处理器指令可以禁止编译器编译代码的某一部分。
如果计划发布两个版本的代码,即基本代码和拥有更多功能的企业版本,就可以使用预处理器指令。
C#提供了其它机制来实现C++指令的功能,如定制特性。C#并没有一个像C++那样的独立预处理器,所谓的预处理器指令实际上是由编译器处理的。
尽管这样,C#仍保留了一些预处理器指令名称,因为这些命令会让人觉得就是预处理器。
1 | #define DEBUG |
它告诉编译器存在给定名称的符号,类似声明一个变量,但没有真正的值,只是存在而已。这个符号不是实际代码的一部分,而只是在编译器编译代码
时存在。在C#代码中没有任何意义。
1 | #undef DEBUG |
删除符号
#define 本身没有什么用,与其它预处理器指令(特别是#if)结合使用时,它的功能就很强大。
这些指令告诉编译器是否要编译某个代码块
1 2 3 | #if DEBUG //do something #endif |
#if,#elif还支持逻辑运算符“!”,"==","!=","||",与或...
当编译器遇到它们时,会分别产生这两个指令后面的文本作为警告或错误。
1 2 3 4 | #if DEBUG #error "you didnot define DEBUG" #endif #warning "dont forget to remove" |
#region和#endregion用于把一段代码标记为又给定名称的一个块
1 2 3 4 | #region Member Field int x; double d; #endregion |
它们可以被某些编译器识别。
#pragma指令可以抑制或还原指定的编译警告。
1 2 3 | #pragma warning disable int i; #pragma warning restore |
到此这篇关于C#基本语法的文章就介绍到这了。
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!