C Sharp初级语法
C#简介
C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。
C# 的构想十分接近于传统高级语言 C 和 C++,是一门面向对象的编程语言,但是它与 Java 非常相似。
下面列出 C# 一些重要的功能:
- 布尔条件(Boolean Conditions)
- 自动垃圾回收(Automatic Garbage Collection)
- 标准库(Standard Library)
- 组件版本(Assembly Versioning)
- 属性(Properties)和事件(Events)
- 委托(Delegates)和事件管理(Events Management)
- 易于使用的泛型(Generics)
- 索引器(Indexers)
- 条件编译(Conditional Compilation)
- 简单的多线程(Multithreading)
- LINQ 和 Lambda 表达式
- 集成 Windows
C#的基本程序结构
先来一个Hello World
1 |
|
- C# 是大小写敏感的。
- 所有的语句和表达式必须以分号(;)结尾。
- 程序的执行从 Main 方法开始。
- 与 Java 不同的是,文件名可以不同于类的名称。
- C# 代码文件的后缀名为cs, (C sharp)
再来看一个矩形类 Rectangle
1 |
|
尝试运行上面代码, 结果如下
Length: 4.5
Width: 3.5
Area: 15.75
C#基础语法
using关建字
在任何C#程序中的第一条语句都是
using System;
using
关建字用于包含命名空间, 即可以使用指定命名空间中的方法
一个程序可以包含多个using语句
class关建字
用于声明一个类, 与Java不同的是, 文件名可以不同与类的名称
注释
1 |
|
成员变量
类中的变量, 可以是基本类型的变量, 也可以是自定义类型的对象
在Rectangle中,length
和width
就是两个成员变量
成员函数
类中执行指定任务的语句
在Rectangle中,AcceptDetails
和Display
等就是成员函数
标识符
用来命名类、变量、函数等
- 可以包含数字, 字母, 下划线
_
和@
- 数字不能开头
- 不能是C#关键字
数据类型
在C#中变量有3种类型
- 值类型
- 引用类型
- 指针类型
基本和C++相同
值类型
例如
int
,char
,float
等, 可以直接分配一个值
基本和C++相同, 不同类型占用不同内存空间
例如下面例子
1 |
|
运行结果如下
Size of int: 4
同时从上述例子中可以看出, 在C#的的打印方法
console.WriteLine()
中可以使用{0}格式化字符串
引用类型
变量指向内存中的一个位置, 例如
string
常见的引用类型:
- 对象类型
- 动态类型
动态类型示例(动态类型的类型检查是在运行时发生的)
1 |
|
字符串
string
示例
1 |
|
指针类型
基本和C++一样, 指向一个内存空间, 如果指向对象的内存空间的话, 访问其成员使用
->
1 |
|
类型转换
注意事项
- 隐式转换只能将较小范围的数据类型转换为较大范围的数据类型
- 显式转换可能会导致数据丢失或精度降低,需要进行数据类型的兼容性检查
- 对于对象类型的转换,需要进行类型转换的兼容性检查和类型转换的安全性检查
隐式类型转换
1 |
|
显式转换
1 |
|
强制转换为字符串
1 |
|
C#提供的类型转换方法
方法名 | 作用 |
---|---|
ToBoolean | 如果可能的话, 把类型转换为布尔型 |
ToByte | 把类型转换为字节类型 |
ToChar | 把类型转换为单个Unicode字符类型 |
ToDateTime | 把整数或者字符串转换为日期-时间 结构 |
ToDecimal | 把浮点型或整数类型转换为十进制类型 |
Todouble | 把类型转换为双精度浮点型 |
ToInt16 | 把类型转换为16位整数类型 |
ToInt32 | 把类型转换为32位整数类型 |
ToInt64 | 把类型转换为64位整数类型 |
… | … |
1 |
|
结果如下
75
53.005
2345.7652
True
接收来自用户的值
Console.ReadLine()
可以以字符串格式接收数据
1 |
|
Convert.ToInt32()
可以把用户输入的数据转换为 int 数据类型
常量
1 |
|
double和decimal有什么区别?
- double是双精度浮点数类型,使用64位来存储数据,可以表示15位数字的精度。在声明double类型的变量时,可以使用后缀D或d来指定值的类型。例如:double num = 100.5D;
- decimal是十进制浮点数类型,使用128位来存储数据,可以表示更高的精度。在声明decimal类型的变量时,可以使用后缀M或m来指定值的类型。例如:decimal num = 100.5M;
1 |
|
定义常量
const double pi = 3.14159;
运算符
假设假设变量 A 的值为 10,变量 B 的值为 20, 常见的算术运算符,关系运算符和逻辑运算符如下
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
– | 自减运算符,整数值减少 1 | A-- 将得到 9 |
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
位运算符示例
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
运算符 | 描述 | 实例 |
---|---|---|
& | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 | (A & B) 将得到 12,即为 0000 1100 |
| | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 | (A | B) 将得到 61,即为 0011 1101 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 | (A ^ B) 将得到 49,即为 0011 0001 |
~ | 二进制补码运算符是一元运算符,具有"翻转"位效果。 | (~A ) 将得到 -61,即为 1100 0011,2 的补码形式,带符号的二进制数。 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 | A << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 | A >> 2 将得到 15,即为 0000 1111 |
杂项运算符
C#中的其他运算符
运算符 | 描述 | 实例 |
---|---|---|
sizeof() | 返回数据类型的大小。 | sizeof(int),将返回 4. |
typeof() | 返回 class 的类型。 | typeof(StreamReader); |
& | 返回变量的地址。 | &a; 将得到变量的实际地址。 |
* | 变量的指针。 | *a; 将指向一个变量。 |
? : | 条件表达式 | (1>0)?12:13 |
is | 判断对象是否为某一类型。 | If( Ford is Car) // 检查 Ford 是否是 Car 类的一个对象。 |
as | 强制转换,即使转换失败也不会抛出异常。 | Object obj = new StringReader(“Hello”); StringReader r = obj as StringReader; |
判断
if-else
,switch
和其它语言一样
循环
while
,do-while
,for
,break
,continue
用法和其他语言一样