0%

C#学习笔记

最近要用到 Unity ,来看看 C# 的语法,看看有没有什么有趣的。

通过 using 来 import ,编程模式是 namespace 里面套着若干 class 。入口点是某个 class 里面的 Main 方法。

公有方法 public ,静态方法 static

创建类实例:

1
Rectangle r = new Rectangle();

数据类型

  • 值类型:bool、整数、浮点数

  • 引用类型:指向一个内存位置

    对象类型、动态类型、字符串类型

循环

  • foreach

    1
    2
    3
    4
    foreach (int element in fibarray)
    {
    System.Console.WriteLine(element);
    }

方法

  • 传递引用参数

    1
    2
    3
    4
    5
    6
    7
    8
    public 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
    8
    public 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 类中提供了一些用于数组的属性及方法。

字符串

stringSystem.String 的别名。

格式化字符串 String.format

类与结构

  1. 类是引用类型,结构是值类型
  2. 结构不支持继承
  3. 结构不能声明默认(无参数)构造函数

但是即使是值类型,仍然可以通过 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
2
3
4
5
6
7
8
9
10
11
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}

索引器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
element-type this[int index]
{
// get 访问器
get
{
// 返回 index 指定的值
}

// set 访问器
set
{
// 设置 index 指定的值
}
}

类似于 C++ 里面的重载 [] 运算符。

太懒了,剩下的先不看了。