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

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

相关推荐
果粒蹬i1 分钟前
Python + AI:打造你的智能害虫识别助手
开发语言·人工智能·python
蒸蒸yyyyzwd1 分钟前
stl源码剖析迭代器学习笔记
c语言·c++
Big Cole2 分钟前
PHP面试题(Redis核心知识篇)
开发语言·redis·php
红色的小鳄鱼2 分钟前
Vue 教程 自定义指令 + 生命周期全解析
开发语言·前端·javascript·vue.js·前端框架·html
阿钱真强道2 分钟前
09 jetlinks-mqtt-属性主动上报-windows-python-实现
开发语言·windows·python·网络协议
小二·2 分钟前
Go 语言系统编程与云原生开发实战(第7篇)分布式系统核心能力:配置中心 × 链路追踪 × 熔断降级(生产级落地)
开发语言·云原生·golang
-To be number.wan4 分钟前
算法学习日记 | 模拟
c++·学习·算法
lead520lyq5 分钟前
Golang Grpc接口调用实现账号密码认证
开发语言·后端·golang
EQ-雪梨蛋花汤5 分钟前
【问题反馈】JNI 开发:为什么 C++ 在 Debug 正常,Release 却返回 NaN?
开发语言·c++
王老师青少年编程5 分钟前
2023信奥赛C++提高组csp-s复赛真题及题解:密码锁
c++·真题·csp·密码锁·信奥赛·csp-s·提高组