最近要用到 Unity ,来看看 C# 的语法,看看有没有什么有趣的。
通过 using 来 import ,编程模式是 namespace 里面套着若干 class 。入口点是某个 class 里面的 Main 方法。
公有方法 public ,静态方法 static 。
创建类实例:
1 | Rectangle r = new Rectangle(); |
数据类型
值类型:bool、整数、浮点数
引用类型:指向一个内存位置
对象类型、动态类型、字符串类型
循环
foreach
1
2
3
4foreach (int element in fibarray)
{
System.Console.WriteLine(element);
}
方法
传递引用参数
1
2
3
4
5
6
7
8public void swap(ref int x, ref int y)
{
int temp;
temp = x; /* 保存 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 temp 赋值给 y */
}输出传递参数
实现多返回值
1
2
3
4
5
6
7
8public void getValue(out int x )
{
int temp = 5;
x = temp;
}
...
n.getValue(out a);
可空类型
int? 等同于 Nullable<int> ,可以被赋值为 null 。
合并运算符 ?? 。
1 | num3 = num1 ?? 5.34; // num1 如果为空值则返回 5.34 |
数组
交错数组 int a[][] 与 C++ 中差不多。
多维数组 int a[,] 则需要每一维的各实例形状均相同。
利用参数数组传可变参数:如 params int[] arr 。
System.Array 类中提供了一些用于数组的属性及方法。
字符串
string 是 System.String 的别名。
格式化字符串 String.format 。
类与结构
- 类是引用类型,结构是值类型
- 结构不支持继承
- 结构不能声明默认(无参数)构造函数
但是即使是值类型,仍然可以通过 ref 传引用。无论是函数签名还是在传参过程中都要加 ref ,其等同于 C++ 中的 & 。
类
类默认
internal,即namespace内可访问;类的成员默认private;构造与析构函数与 C++ 一致。
C# 不支持多重继承,只能继承一个父类,在初始化时可以通过
base关键字使用父类的构造函数,然而,可以实现多个接口达成多重继承的效果所以说只用接口他不香嘛?
回忆 C++:
abstract表示抽象类,抽象方法;sealed表示不可被继承;虚方法virtual,使用override重载继承下来的方法。
接口
interface 。
异常处理
try, catch, finally, throw 与 C++ 相同。
在函数签名中不知道要不要声明它会抛出什么异常。
文件
文本、二进制文件读写。等用到的时候再过来看。
下面就是一些 C# 的高级语法啦。
特性 Attribute
预定义特性
AttributeUsage:描述一个自定义特性,它有三个参数validon描述该自定义特性可用在哪些语言元素中;allowmultiple描述是否是多用的;inherited描述该自定义特性是否能被派生类继承Conditional:条件编译,用来输出调试信息时比#ifdef要优雅,但是有一定限制Obsolete:表明被特性描述的方法已经过时了,但是又不想删掉它,因此在编译时输出一条警告信息
自定义特性
从 System.Attribute 派生。通过构造函数传递定位 (positional) 参数。
反射
可以对于程序本身进行操作。据称非常慢,那就先不看了。
属性
1 | public string Code |
索引器
1 | element-type this[int index] |
类似于 C++ 里面的重载 [] 运算符。
太懒了,剩下的先不看了。