2.1 第一个C#程序

using System;                                    // 导入命名空间

namespace Test {                                 // 命名空间
    internal class Program {                     // 类声明
        static void Main(string[] args) {        // 方法声明
            Console.WriteLine("Hello World");    // 语句
        }
    }
}

2.2 语法

using System; 

namespace Test {
    internal class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hello World");
        }
    }
}

2.2.1 标识符和关键字

标识符是程序员为类、方法、变量等选择的名字。

System    Test     Program      Main    args     Console     WriteLine

关键字是对编译器有特殊意义的名字。 特殊情况 @+关键字 作标识符

using     namespace      internal     class     static     void     string

2.2.2 字面量、标点与运算符

字面量是静态的嵌入程序中的原始数据片段 (例如: int x=12; 中的12就是字面量)

标点有助于划分程序结构。(例如: { } ; )

运算符 + – * / % . 等

2.2.3 注释

// 注释内容

/* 
        注释内容
 */

/// XML注释

/**
 *
 *
 **/

2.3 类型基础

2.3.1 预定义类型

数值类型:

int     uint      short     ushort     long    ulong

sbyte(-127~128) byte(0~256) decimal(128) double    float

逻辑值: bool

字符: char(2个字节)

引用类型: string   object

2.3.2 自定义类型

使用 class

2.3.3 类型转换

隐式转换:转换中没有信息丢失,总能成功。 (例如:int ⇒ long)

显示转换:信息可能会丢失,不一定成功。 (例如:long ⇒ int)

int x=10;

long y=x;   // 隐式转换

x=(long)y;  // 显示转换

2.3.4 值类型和引用类型

值类型的变量或常量的内容仅仅是一个值。 (例如:struct int …. char)

引用类型变量或常量中的内容是一个含值对象的引用。

 

引用类型可以赋值为 字面量null。

值类型想要赋值为null,需要使用可空修饰符 ?

string str=null;

int? x=null;

存储开销对比

  • 值类型实例占用的内存大小就是存储字段所需的内存。CLR使用整数倍的大小来分配,可能浪费
  • 引用类型 除了对象所占用的字段大小外,需要额外的管理空间开销。

2.4 数值类型

2.4.1 数值字面量

十六进制:0x 开头

二进制:0b 开头

指数表示:E/e

数值后缀:F D M(decimal) U(uint) L(long) UL

2.4.2 算术运算符

+  -  *   /   %

自增自减:++   - –

位运算符:~(取反)   &   |   ^   <<   >>

2.5 布尔类型和运算符

==     !=

&&     ||

? :

2.6 字符和字符串

转义字符: \ ”符号”

字符串拼接:+

字符串插值:$

字符串忽略转义字符:@

字符串比较:CompareTo()

2.7 数组

2.7.1 一维数组

char[] chs=new char[5];

chs[0]='A';
chs[1]='B';

for(int i=0;i<chs.Length;i++){
    chs[i]='A';
}

foreach(var ch in chs){
    Console.Write(ch+" ");
}

2.7.2 多维数组

// 二维数组
int[,] ints=new int[][];

for(int i=0;i<ints.GetLength(0);i++){
    for(int j=0;j<ints.GetLength(1);j++){
        ints[i][j]=i*3+j;
    }
}

// 交错数组
int[][] ints2=new int[][]{
    new int[] {1,2,3},
    new int[] {4,5},
  new int[] {6,7,8,9}
};

2.8 变量和参数

2.8.1 栈和堆

是存储局部变量和参数的内存块。

  函数进入,栈分配一个;离开函数,就会释放一个。

是保护对象的内存块。新创建的对象会分配在堆上并返回其引用。

  程序执行中,堆会被新创建的对象不断填充;.NET 运行时的垃圾回收器会定期从堆释放对象。

2.8.2 明确赋值

  • 局部变量在读取前必须赋值
  • 调用方法必须提供实际的参数
  • 运行时会自动初始化其他变量(例如字段和数组元素)

2.8.3 默认值

所有引用类型              null

所有数字和枚举类型   0

char                             ‘\0’

bool                             false

 

default 关键字获取类型的默认值

2.8.4 参数

参数传递方式

ref      按引用传递   传入   参数使用前必须初始化

out     按引用传递   传出   可以在传入前不赋值,但必须在函数结束前赋值。

无修饰符    按值传递       传入

 

params 修饰符

  只能修饰方法中的最后一个参数,它能使方法接受任意数量的指定类型参数,必须声明为数组

void Method(int x,params string[] strs){
    for(int i=0;i<strs.Length;i++){
        Console.WriteLine(x);
    }
}

void Main(){
    Method(4,{"aa","bb","cc"});
}

命名参数

void Method(int x,int y){
    Console.WriteLine(x+" "+y);
}

void Main(){
    Method(y:2,x:4);
}

var 隐式局部变量

  编译器根据值确定类型。

var x=10;
var y='A';
var z=true;

2.9 表达式和运算符

表达式本质上是值。最简单的表达式是常量和变量。

12   1230   1+(1230)

2.9.1 基础表达式

Math.Sqrt() 等。

2.9.2 空表达式

是没有值的表达式。 (例如: Console.Write(1) 没有值)

2.9.3 赋值表达式

=   +=   -=   *=   /=   %=   << =   >> =

2.10 null 运算符

2.10.1 null 合并运算符 ??

string str1=null;
string str2=s1??"nothing";
// 如果s1为null,str2赋值为 "nothing"

2.10.2 null 条件运算符 ?.

string x = "abc";
string z = x?.ToUpper();
// 如果x不为null,z=x.ToUpper();

2.11 语句

if   if-else   for   while   do-while   switch   continue   break   goto   return

using 语句块

2.12 命名空间

命名空间是一系列类型名称的领域。 (例如: System.Security.Cryptography)

namespace 关键字为其中的类型定义了命名空间。

usingusing static 指令

using static System.Console

void Main(){
    WriteLine("Hello World");
}

设置命名空间别名

using T=System.Console;

void Main(){
    T.WriteLine("Hello World");
}

外部别名

使用 extern alias

原文地址:http://www.cnblogs.com/Swbna/p/16878910.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性