C#学习
基本语法
C#大部分东西都和java相同甚至类似,下面所列举的是和java不同的内容。
using
C#中的using,用于在程序中包含命名空间,一个程序可以包含多个using,类似于java中的import。
注释
// 我是注释 => 这是单行注释
> /* 我是多行注释*/
> /// 我是文档注释
>
> 文档注释遵循xml风格,举个例子
> ///<summary>
> ///成员方法说明
> ///</summary>
> ///<param name="形参名1">形参1</param>
> ///<param name="形参名2">形参2</param>
> ///<returns>返回值</returns>
标识符
- 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
- 标识符中的第一个字符不能是数字
- 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ’ / \。
- 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
- 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
- 不能与C#的类库名称相同。
数据类型
值类型
类型 | 描述 | 范围 | 默认值 |
---|---|---|---|
bool | 布尔值 | True 或 False | False |
byte | 8 位无符号整数 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | ‘\0’ |
decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
如果要获取某一个类型占用的字节大小:sizeof(类型)
引用类型
引用类型说变了就是类似于指针,他指向一个内存位置,包括 object,dynamic,String,和java一样,object是所有类的父类。
dynamic
可以声明任意类型的数据。
String
字符串类型的值可以通过两种方式分配:" “和@” "
String str = "wenyihui";
String 字符串的前面+@(称为逐字字符串)可以将转义字符()当作普通字符对待。
String str = @"C:windows";
//等价于
String str = "C:\\windows";
并且string可以任意换行,;之前的都算在字符串内。
类型转换
类型转换分显式和隐式的。
隐式转换是将一个较小范围的数据类型转换为较大范围的,这个转换是编译器自动完成的且不会导致数据丢失。
显式转换
即强制类型转换。
将一个较大范围的数据类型转换为较小范围的,或将一个对象类型转换为另一个对象类型时,需要使用强制类型转换,其中可能会造成数据丢失。
类型转换方式同java。
在进行类型转换的时候需要注意:
- 隐式转换只能将较小范围的数据类型转换为较大范围的数据类型,不能反过来。
- 显示转换可能会导致数据丢失或精度降低,需要进行数据类型的兼容性检查
- 对于对象数据类型的转换,需要惊醒类型转换的兼容性检查和类型转换的安全性检查。
常量
定义常量的关键字是const
运算符
算术运算符、关系运算符、逻辑运算符、赋值运算符略
其他运算符
运算符 | 描述 | 示例 |
---|---|---|
& | 返回变量的地址 | &a 得到变量的实际地址 |
* | 变量指针 | *a 将得到变量的实际地址 |
?: | 条件表达式 | condition ? consequent : alternative 如果condition的结果为true,计算consequent,如果为false则计算alternative |
is | 判断对象是否为某一类型 | if(Ford is Car)//判断Ford是否是Car类的一个对象 |
as | 强制转换,即使转换失败也不会抛出异常 | Object obj = new StringReader(“Hello”); StringReader r = obj as StringReader; |
修饰符
public | 所有对象都可访问 |
---|---|
protected | 只有本类对象及其子类对象可以访问 |
private | 对象本身在对象内部可以访问 |
internal | 允许一个类将其成员变量和成员方法暴露给当前程序中的其他函数和对象 |
protected internal | 访问限于当前程序集或派生自包含类的类型 |
private protected | 访问受限于包含类或当前程序集中派生自包含类的类型 |
匿名方法
1.关键字方式 delegate
2.Lambda表达式
后期继续完善博客