C#基础语法
数据类型
整数类型
类型 | 范围 |
---|---|
sbyte | 8位有符号整数 |
short | 16位有符号整数 |
int | 32位有符号整数 |
long | 64位有符号整数 |
byte | 8位无符号整数 |
ushort | 16位无符号整数 |
uint | 32位无符号整数 |
ulong | 64位无符号整数 |
浮点类型
类型 | 范围 |
---|---|
float | 精确到6~9位数 |
double | 精确到15~17位数 |
decimal | 精确到28~29位数 |
一般情况包含小数点的数值会被默认为double类型,在数值后面添上f或F 可以强制类型转化为float
在c#中布尔类型的值只能是true和false(和java类似),不能将其他值指定给布尔类型变量,也不能将它转化为其他类型,如下面这个语句就是错误的
- bool x = 520;
枚举类型
1 | enum{ |
强制类型转化
这个和java基本类似,(强制转换类型)对象
运算符
- “按位与”运算 &
- “按位或”运算 |
- “按位取反”运算 ~
- “按位异或”运算 ^
- “移位操作” >> << 用来进行2的乘除运算挺好用的
- is 运算符 判断变量是否为指定类型
- 条件运算符 (条件式?成立执行:不成立执行) 这个还是很好用的
- typeof 运算符 获取对象类型
Char类 字符
常用方法及其说明
方法 | 说明 |
---|---|
IsControl() | Unicode字符是否为控制字符类别 |
IsDigit() | Unicode字符是否为十进制数字类别 |
IsHighSurrogate() | 指定的 Char 对象是否为高代理项 |
IsLetter() | 指定的 Unicode 字符是否属于字母类别 |
IsLetterOrDigit() | 指定的 Unicode 字符是属于字母类别还是属于十进制数字类别 |
IsLower() | 指定的 Unicode 字符是否属于小写字母类别 |
IsLowSurrogate() | 指定的 Char 对象是否为低代理项 |
IsNumber() | 指定的 Unicode 字符是否属于数字类别 |
IsPunctuation() | 指定的 Unicode 字符是否属于标点符号 |
IsSeparator() | 指定的 Unicode 字符是否属于分隔符类别 |
IsSurrogate() | 指定的 Unicode 字符是否属于代理项字符类别 |
IsSurrogatePair() | 两个指定的 Char 对象是否形成代理项对 |
IsSymbol() | 指定的 Unicode 字符是否属于符号字符类别 |
IsUpper() | 指定的 Unicode 字符是否属于大写字母类别 |
IsWhiteSpace() | 指定的 Unicode 字符是否属于空白类别 |
Parse() | 将指定字符串的值转换为它的等效 Unicode 字符 |
ToLower() | 将 Unicode 字符的值转换为它的小写等效项 |
ToUpper() | 将 Unicode 字符的值转换为它的大写等效项 |
ToLowerInvariant() | 使用固定区域性的大小写规则,将 Unicode 字符的值转换为其小写等效项 |
ToString() | 将此实例的值转换为等效的字符串表示 |
ToUpperInvariant() | 使用固定区域性的大小写规则,将 Unicode 字符的值转换为其大写等效项 |
TryParse() | 将指定字符串的值转换为它的等效 Unicode 字符 |
转义字符
转义字符 | 作用 |
---|---|
\n | 回车换行 |
\t | 横向跳到下一制表位 |
\b | 退格 |
\r | 按回车建 |
\f | 换页 |
String 类 字符串
这个和java是完全不一样的,在java中要使用equals(),当然在C#中也可以使用这个函数去判断是否相同使用 == 可以判断两个字符串是否完全一致。是否相同,不是是否相等
Compare(String A,String B,bool ignorCase) 比大小
比较两个字符串的大小,若A>B,return 1;反之 return -1,二者相等,return 0。ignorCase 表示比较时是否忽略大小写
CompareTo(String B) 比大小
和上面差不多
Format() 格式化输出
- Format(String format,object obj);
格式符(大小写都可以) | 名称 |
---|---|
c | 货币 |
d | 整型 |
e | 科学计数法 |
f | 定点 |
n | 数字 |
p | 百分比 |
x | 十六进制 |
- 日期控制
格式符(注意大小写) | 说明 |
---|---|
d | YYYY-MM-DD |
D | YYYY年MM月dd日 |
t | hh:mm |
T | hh:mm:ss |
f | YYYY-MM-DD hh:mm |
F | YYYY年MM月dd日 hh:mm:ss |
g | YYYY-MM-DD hh:mm (可排序) |
G | YYYY-MM-DD hh:mm:ss (可排序) |
M或m | MM月dd日 |
Y或y | YYYY年MM月 |
Substring(int start,int length) 截取字符串
若 length大于字符串本身的长度,则从start的位置开始截取全部
Split(params char[] a ) 分割字符串
用过py的应该都知道
Insert(int start,String value) 插入字符串
指定位置插入字符串
PadLeft(int totalWidth,char paddingChar) 左侧填充字符串
左侧填充字符串到你指定的长度,但是切记这个长度是总长度。
将 Left -> Right 就是右侧
Remove(int start,int count) 删除指定位置字符串
count可以不写,不写默认在指定位置后全删
count > 0
Copy(String str) 复制字符串
a = String.Copy(str);
将str复制给a
CopyTo(int start, char[]destination,int destinationIndex,int count)
举一个例子:
1 | static void Main(string[] args) |
Replace(a,b) 替换字符
将 a -> b
StringBuilder 可变字符串类
要是学过java对这两个的区别就很熟悉了,都大差不差
当你需要频繁改变字符串时,stringBuilder的效率明显高于string,string是不可变长的。
正则表达式
- 爬虫必学,十分好用
行定位符
- ^ 表示行的开始, $ 表示行的结束
元字符
元字符 | 说明 |
---|---|
. | 匹配除了换行符以外的任意字符 |
\w | 匹配字母,数字,下划线或者汉字 |
\s | 匹配任意空白字符 |
\d | 匹配数字 |
\b | 匹配单词的开始或者结束 |
限定符
限定符 | 说明 |
---|---|
? | 匹配前面的字符零次或者一次 |
+ | 匹配前面的字符一次或者多次 |
* | 匹配前面的字符零次或者一次 |
{n} | 匹配前面的字符n次 |
{n,} | 匹配前面的字符最少 n次 |
{n,m} | 匹配前面的字符最少 n次,最多 m次 |
如果想要匹配任意一个 汉字,可以使用[\u4e00-\u9fa5]
如果想要匹配连续多个 汉字,可以使用[\u4e00-\u9fa5]+
排除字符
- ^ 也可以表示排除
如:[^a-zA-Z]
匹配非字母字符
举一个综合例子
- 身份证号码匹配
1 | (^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$ |
C#中使用正则表达式
名称 | 说明 |
---|---|
IsMatch() | 正则表达式是否找到匹配项 |
Match() | 返回正则表达式查找对象 |
Matchs() | 多次匹配 |
Replace() | 按照正则表达式替换 |
Split() | 按照正则表达式分割 |
数组
- 一维数组的定义和java大差不差,关键在于二维数组的定义
type[,] name = new type[,]
type[][] name = new type[][]
java用的这个- 初始化数组和java一样通过
" { } "
就可以完成初始化
遍历数组
1 | foreach(type a in arrName){ |
ArrayList 类
- 构造方法:
ArrayList name = new ArrayList();
- 和java一样的方法,大部分用法也类似
函数名 | 作用 |
---|---|
add() | 末尾添加元素 |
Instert(int index,object obj) | 指定位置插入元素obj |
Clear() | 删除所有元素 |
Remove(Object obj) | 移除obj |
RemoveAt(int index) | 指定位置移除元素 |
RemoveRange(int index,int count) | 从index开始移除count个元素 |
Contains(Object obj) | 查找obj |
哈希表
- 构造方法:
Hashtable name = new Hashtable();
- 和java一样的方法
函数名 | 作用 |
---|---|
add(key,value) | 添加键值对 |
Clear() | 删除所有元素 |
Remove(key) | 移除键值 |
Contains(Object key) | 查找键值 |
ContainsValue(value) | 查找特定值 |
遍历数组
1 | foreach(DictionaryEntry a in HashtableName){ |
类与对象
- 类的修饰符
修饰符 | 作用 |
---|---|
new | 仅在嵌套类声明时使用,表明类中隐藏了由基类继承而来、与基类成员同名的成员 |
public | 不限制对该类的访问 |
protected | 只能从其所在类和所在类的子类(派生类)进行访问 |
internal | 同一程序集的任何代码都可以访问 |
private | 只有其所在类才能访问 |
abstract | 抽象类,不允许建立类的实例 |
sealed | 密封类,不允许被继承 |
- 类的基本操作和c++大同小异,其实和java也差不多,但是java一般不写析构函数。
访问器
1 | namespace hello |
其中的get和set就是访问器,一旦出现,必须成对出现
方法的参数类型
- params: 用来指定在参数数目可变时采取的方法参数,必须是一维数组。
- ref: 按引用方式传递参数。参数必须初始化。
- out: 关键字来定义输出参数,也是引用传递。但是不要求参数初始化。
代码展示:
1 | namespace hello |
类的继承
继承类时,需要使用冒号加类名。当对一个类应用sealed修饰符时,此修饰符会阻止其他类从该类继承
base 关键字
- 当子类重写了父类的方法时,可以通过base调用原有父类方法。使用方法和this类似。
访问父类成员只能在构造函数、实例方法或者实例属性中进行,因此,从静态方法中使用base是错误的。
重写虚方法
1 | class people |
结构struct
- 和c艹一模一样
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 dpのweb!
评论