以C++为基础快速了解C#

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++基本相同

静态成员只有一个副本

csharp 复制代码
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++基本一致,不赘述概念和规则了。

这里放一个函数重写的例子吧。

相关推荐
Dxy12393102163 小时前
Python 使用正则表达式将多个空格替换为一个空格
开发语言·python·正则表达式
故事和你914 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__4 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__5 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
石榴树下的七彩鱼5 小时前
图片修复 API 接入实战:网站如何自动去除图片水印(Python / PHP / C# 示例)
图像处理·后端·python·c#·php·api·图片去水印
techdashen5 小时前
Rust项目公开征测:Cargo 构建目录新布局方案
开发语言·后端·rust
星空椰5 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
忒可君5 小时前
C# winform 自制分页功能
android·开发语言·c#
Rust研习社5 小时前
Rust 智能指针 Cell 与 RefCell 的内部可变性
开发语言·后端·rust
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心