using System: - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句, 相当于C++的 using namespace std;
C# 是大小写敏感的。
所有的语句和表达式必须以分号(;)结尾。
程序的执行从 Main 方法开始。
与 Java 不同的是,文件名可以不同于类的名称。
构造函数
和C++一样,如果显示编写了构造函数,默认构造就不会自动构造,需要提供无参的构造,不然就不能用new Circle()来构造。
如果不初始化字段,会调用自己的构造函数。上面的int就会默认构造为0、
顶级语句
一句话:可以想像写Python一样写。
特点:
无需类或方法:顶级语句允许你直接在文件的顶层编写代码,无需定义类或方法。
文件作为入口点:包含顶级语句的文件被视为程序的入口点,类似于 C# 之前的 Main 方法。
自动 Main 方法:编译器会自动生成一个 Main 方法,并将顶级语句作为 Main 方法的主体。
支持局部函数:尽管不需要定义类,但顶级语句的文件中仍然可以定义局部函数。
更好的可读性:对于简单的脚本或工具,顶级语句提供了更好的可读性和简洁性。
适用于小型项目:顶级语句非常适合小型项目或脚本,可以快速编写和运行代码。
与现有代码兼容:顶级语句可以与现有的 C# 代码库一起使用,不会影响现有代码。
类型
值类型:
C#中类的拷贝
为了深拷贝,首先需要提供拷贝构造,和cpp一样
且和CPP不一样的是:他需要显示调用
运算符
循环:
while, for, do while 和CPP一样。
foreach循环:类似CPP的for(auto e : v)语句。
Sting
可以使用以下方法之一来创建 string 对象:
通过给 String 变量指定一个字符串 通过使用 String 类构造函数 通过使用字符串串联运算符( + )
通过检索属性或调用一个返回字符串的方法 通过格式化方法来转换一个值或对象为它的字符串表示形式
string的类方法:
Compare()
Concat:链接两个字符串对象
Contains:判断字符串中是否有某个字符串对象
Substring(某位置,截取几个)
从字符串的某个位置截取几个字符
Join:链接字符串数组
类型转换:
隐式和强制:
从标准输入中输入数据(默认键盘文件)
访问限定符和继承
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。
不写默认是private
protected相关的用于继承,和CPP一样,不赘述。
数组作为形参
params修饰的数组形参:params参数必须是最后一个参数。
Struct 封装
简单使用
直接先放一个使用的例子,和C++的简单使用是相同的。
struct vs class
不能给结构定义无参构造函数,无参构造函数是默认自动定义的 结构里可以实现一个或者多个接口
结构成员不能被指定为 abstract, virtual, protected
当使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New
操作符即可被实例化。但是如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
结构是值类型,在栈上。结构赋值给另一个变量的时候,是深拷贝。类是引用类型,在堆上。类赋值的时候如果不调用拷贝构造,则是浅拷贝。
结构不支持继承和多态,但类可以
结构不能有无参数的构造函数: 结构不能包含无参数的构造函数。每个结构都必须有至少一个有参数的构造函数。类可以有无参数的构造函数: 类可以包含无参数的构造函数,如果没有提供构造函数,系统会提供默认的无参数构造函数
结构不能有无参数的构造函数: 结构不能包含无参数的构造函数。每个结构都必须有至少一个有参数的构造函数。类可以有无参数的构造函数: 类可以包含无参数的构造函数,如果没有提供构造函数,系统会提供默认的无参数构造函数
类
构造和析构:和C++基本相同
静态成员只有一个副本
class MyClass
{
public const int a = 10;
public static int b = 20;
}
public void Test2()
{
Console.WriteLine(MyClass.a); // 10
Console.WriteLine(MyClass.b++); // 20
Console.WriteLine(MyClass.b); // 21
}
继承和多态
和C++基本一致,不赘述概念和规则了。
这里放一个函数重写的例子吧。