不严谨,不权威,仅作为笔记^_^
C#没有头文件,使用using语句引入其它模块,如:
using System.Windows;
C#里switch参数可以不是整形,C++里必须是整形,赞!
C#没有全局变量,所有东西都必须放到类里面,和java类似
C#不支持多重继承
C#可以将一个类分在多个文件中定义,加入partial关键字指示,如:
public partial class App : Application
{
...
}
C#定义数组和对象后需要new 出来,定义出来的只是一个引用,不像C++,定义之后数组或对象已经创建了。比如:
int a[] = new int[10];
C#定义值类型的变量不用new,比如下面这些:
bool, int, char, uint ... ...
C#基本数据类型
bool, byte, char, decimal, double, float, int, long, sbyte, short, uint, ulong, ushort
decimal是C++没有的,可以详细了解下。
C#用()来做类型转换,也可以用as来做强制转换,不抛异常。
C#注释"///",XML注释
C#动态变量类型,没有具体的类型,运行时检查,类似于php、lua里面的变量。
dynamic d = 20;
C#有字符串类型,赋值时在字符串前面加@可以取消字符串中“\”的转义作用。
string str = @"c:\windows";
C#中也有指针,但是用的较少。
C#的类有属性这个概念,提供了对私有字段的访问封装,以set和get接口实现对字段的封装。C++没有这个概念。
C#的数值变量自带类型转换的成员函数。如:
float a = 10;
int b = a.ToInt32
C#字符串转整形
string str = "123";
int a = int.Parse(str);
C#不抛出异常的转换,了解一下:int.TryParse(string s, out int i)
C# 循环语句基本上和C++一样,多了一个foreach,可以了解一下
int[] a = new int[10];
foreach (int b in a)
{
...
}
C# 也用const定义常量
C# 算术运算符、位运算符、逻辑运算符同C++
C# 赋值运算符中<<=, >>=, &=, ^=, |=,不知道C++中有没有
C# typeof()返回class的类型,is判断是否为某一类型。
C# 访问修饰符
public, private, protected,和C++一样
多了internal, protected internal
C# 用ref声明引用参数
C# 用out声明输出参数,感觉本质上和ref和差不多啊。
C# 可空类型(Nullable),和swift的那个什么好像啊。
C# ??运算符
double? num1 = null;
double num2 = num1 ?? 1.23 //num1如果为空的话,就返回1.23。
C# 声明数组
double[] blance = new double[10];
C# Array是所有数组的基类,提供了用于各种数组的属性和方法
C# string 相加
C# String.Join, 将String数组中的元素用分隔符隔开,产生一个字符串。
string [] array={"abc", "def", "ghi"};
string a = string.Join("-", array);
// 此时 a="abc-def-ghi"
C# 字符串格式化
DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
string chat = String.Format("Message sent at {0:t} on {0:D}");
C# 结构体定义和C++基本一样,除了:
不能定义析构函数,不能定义默认构造函数,不能继承,不能被继承,可以实现接口
结构可以不用new 实例化
结构是值 类型,而类是引用类型
C# 枚举和C++差不多。
C# 没有union类型
C# abstract关键字
C# 运算符重载
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
C# 接口是个新东西,从C++角度来说,是一种特定的类,其特别之处在于:
只负责声明不负责定义
接口的成员不能有public, protected、internal、private修饰符,因为接口的方法都是要由继承者去实现的,必然是public的
接口内不能有字段、构造函数
接口内可以定义属性
必须实现接口的所有方法。
C#子接口或类可以用new 来隐藏父接口中的同名方法。
待补充完善...