C# 基础知识总结(持续更新中...)

ops/2025/3/5 9:05:24/

C#有哪些数据类型?

值类型

引用类型

整数类型

实数类型

布尔类型

字符类型

结构类型

枚举类型

数组

字符串

接口

委托

对象型

C#有哪几种访问修饰符,有何区别?

public

公共成员

访问不受限制

private

私有成员

只限于当前类成员访问

protected

保护成员

访问限于当前类及其派生类

internal

内部成员

访问限于当前程序集

protected internal

保护内部成员

访问限于当前程序集或派生类

seald

密封

密封类不能被继承

密封方法必须是在重写父类虚方法的派生类的方法

装箱和拆箱

装箱:将值类型隐式地转换为引用类型

拆箱:将引用类型显式地转换为值类型

数据类型转换有哪些方法?

1、隐式类型转换和显式类型转换。

2、Parse方法和TryParse方法

3、Convert类方法

4、ToString()方法

5、is和as

is 和 as的区别?

is用来判断对象是否和指定类型兼容,如果兼容返回true;不兼容返回false

as在判断兼容性的同时,进行类型转换。如果兼容则返回类型转换后的对象,如果不兼容则返回null

虚方法和抽象方法的区别?

相同点:

1、重写虚方法或实现抽象方法时,都要使用override关键字来修饰

2、派生类中的重写方法应该与基类中被重写的方法有相同访问权限、返回值类型、方法名和参数列表。

不同点:

1、虚方法关键字是virtual,抽象方法关键字是abstract;

2、虚方法既有声明部分也有实现部分,抽象方法只有声明部分没有实现部分。

3、派生类对基类虚方法的重写不是必须的,但必须对基类的抽象方法提供实现过程

构造函数和析构函数分别有什么作用,相同点和不同点?

构造函数:初始化一个对象的状态

析构函数:用于销毁对象,释放对象占用的系统资源

相同点:

1、函数的名称与类名相同

2、如果没有自定义该函数时,系统会自动生成一个默认的指定函数

3、都没有返回值

不同点:

1、构造函数可以重载,析构函数不能

2、构造函数可以有访问修饰符、可以是静态的、可以有多个参数,析构函数不能有访问修饰符、不能是静态的、不能包含任何参数

3、构造函数可以被显示调用,析构函数由系统自动调用

C#静态构造函数特点是什么?

与类名相同

不能定义访问修饰符

没有参数

不能被重载

只能访问类的静态成员,不能访问实例成员

一个类只能有一个静态构造函数

不能显式调用静态构造函数,而是由.NET运行时自动调用。

C#中有哪些值类型和引用类型?

值类型:整型、实数型、字符型 、布尔类型、枚举类型、结构类型

引用类型:类 、接口、委托、数组、 字符串、对象类型

抽象类和接口的区别

相同点

1、都可以被继承,派生类必须实现抽象方法和接口中声明的方法

2、都不能被实例化

不同点

1、抽象类用abstract关键字修饰,接口用interface关键字修饰

2、一个类可以继承多个接口、但是只能继承一个抽象类

3、实现抽象方法时需要使用override关键字,实现接口成员时不能使用override.

4、接口只能包含不实现的接口成员,抽象类除了可以包含抽象方法之外,还可以包含数据成员以及完全实现的方法和属性。

5、抽象类可以有构造方法,接口不能有构造方法

类和结构的区别?

相同点

都可以用来实现封装

不同点

1、类是用class 关键字来修饰,结构是用struct关键字来修饰

2、类是引用类型,结构是值类型

3、类支持继承,结构不支持继承

4、结构体成员不能使用protected访问修饰符,而类可以

5、结构体需要在构造函数中初始化所有成员变量,而类随意

6、结构体不能被static关键字修饰,而类可以

new关键字的作用

可以用作运算符、约束、修饰符

1、运算符:用于创建对象和调用构造函数

2、修饰符:可以显式隐藏从基类继承的成员(变量、属性、函数)

3、约束:用于在泛型声明中约束可能用作类型参数的参数类型。

i++和++i有什么区别?

i++称为后置运算,表示先使用变量的值再进行自增;

++i称为前置运算,表示先进行自增再使用变量的值

介绍一下重载和重写,它们的区别是什么?

重载:在一个中有多个相同名称的方法,它们的具有不同的签名(即参数列表有不同的参数类型或者不同的参数个数),一般它们实现的功能也不一样

重写:重写在继承时发生,在派生类中重新定义基类中的方法

区别:

1、重载发生同一个类中,重写在继承时发生,在派生类中实现

2、重载方法的参数列表必须不同,返回值可不同。重写方法和基类方法的名称、返回值类型、参数列表都必须完全一致。

3、重载是编译时多态;重写时运行时多态

foreach与for的区别

1、使用for遍历时可以对集合的数据进行修改,使用foreach只能对数据进行读取不能修改

2、在循环次数未知或只需读取数据的情况下使用foreach,在需要对数据进行修改时使用for

Math.Round

Math.Round(11.5)等于多少? Math.Round(-11.5)等于多少?

Math.Round(11.5)=12

Math.Round(-11.5)=-12

用sealed修饰的类有什么特点?

1、用Sealed关键字修饰的类是密封类

2、密封类不能被其他类继承但可以继承其他类或接口

3、密封类中不能声明虚方法

4、密封类不能声明为抽象的

C#如何实现变长参数?

使用params关键字声明的数组型参数来实现

base关键字和this关键字

this关键字表示当前类的对象

base关键字表示基类

C#中this与base的区别_this base-CSDN博客

C#中值传递与引用传递的区别是什么?

值传递:调用方传递给形参的只是实参数据的一个副本,形参发生更改不会影响实参的值

引用传递:调用方将实参变量的引用传递给形参,实参变量的引用代表数据值的内存地址,形参和实参指向同一个引用。形参的发生更改时,实参的值也会发生更改。

值类型和引用类型的区别是什么?

内存区域上的区别

值类型:数据存储在栈上,超出作用域就自动清理

引用类型:一个具有引用类型的数据并不驻留在栈内存中,而是存储于堆内存中。在堆内存中分配内存空间直接存储所包含的值,而在栈内存中存放定位到存储具体值的索引位置编号。当访问一个具有引用类型的数据时,需要到栈内存中检查变量的内容,而该内容指向堆中的一个实际数据。

ref 和out 的区别

相同点:

都可以实现方法返回多个数据的效果

不同点:

1、使用ref关键字修饰的参数称为引用型参数,而out关键字修饰的参数被称为输出型参数

2、用ref传入的参数需要先初始化,而用out传入的参数不用初始化

3、用out传入的参数需要在方法内部赋值,而用ref传入的参数不需要

C#如何实现多返回

使用ref关键字来声明多个引用型参数来实现

使用out关键字来声明多个输出型参数来实现

属性的作用?

1、属性是对变量的一种封装,通过设置对变量读写的属性来控制对字段的访问,保证了数据的封装性

2、在对需要与外界交互的字段,开放权限,保证了灵活性

3、可以在属性内部添加像方法一样处理逻辑和运算

字符串声明

字符串中string str=null和string str=""和string str=string.Empty的区别

string.Empty 相当于"",Empty 是一个静态只读的字段。

string str="" , 初始化对象,并分配一个空字符串的内存空间

string str=null, 初始化对象,不会分配内存空间

Array(数组)、ArrayList(动态数组)和List(列表)的区别?

1、容量大小

Array的容量在创建时被确定,之后不能改变。

ArrayList和List的容量大小根据存储元素的多少进行自动调整。

2、类型安全

Array和List是类型安全的,它只能存储一种特定类型的元素

ArrayList不是类型安全的,它可以存储object类型的元素。可以将任何类型的对象添加到ArrayList中,编译时不会报错,但可能在运行时引发类型错误。

3、维度不同

数组可以有多个维度,ArrayList和List只有一个维度。

C#中的委托是什么?事件是不是一种委托?

委托是一种引用类型,它可以将方法作为变量或者参数进行传递。事件是委托类型的变量,是委托的一种特殊形式。

简述Func与Action的区别?

Func和Action都是系统预定义的泛型委托,Func 是有返回值的委托, Action 是没有返回值的委托。

C#字符串的驻留机制,如何解决?

一旦声明一个字符串并赋值,那么对该字符串的操作,系统会额外开辟内存地址存储处理后的新字符串,原来字符串不会发生改变;如果声明一个新的字符串与原来的字符串内容相同,那么该字符串仍然指向原来字符串的地址,不会开辟新的内存空间。

使用StringBuilder进行字符串的操作,它是对自身对象进行操作,不会生成新的对象。

string和StringBuilder的区别,两者性能的比较

使用链表,利用链接代替复制

面向对象三大特性

封装性

继承性

多态性

定义

将对象的数据和操作代码组合到同一个结构中.

派生类继承了基类中的类成员。既有继承又有扩展。

方法具有相同的名称,但是根据不同的情况,方法具有不同的实现方式。

体现

通过访问修饰符来体现封装

一个类可以继承单个类或者继承多个接口

方法重载

方法重写


http://www.ppmy.cn/ops/163264.html

相关文章

es检索elasticsearch检索curl实现

在 Elasticsearch(ES)集群中进行搜索时,你可以使用不同的搜索方式,下面为你介绍几种常见搜索场景下的请求体(body)数据示例。假设你使用的是 Elasticsearch 的 RESTful API,并且通过 HTTP 请求来执行搜索操作。 1. 简单的全文搜索 如果你想在指定的字段中进行全文搜索…

养老小程序方案详解居家养老小程序系统

养老小程序,上门居家养老小程序,用户端护工端小程序,管理后台。php开发语言,可源码搭建,二次开发或者定制开发。 一 用户端:小程序 核心功能模块:用户完善个人健康档案,在线选择服…

贪心算法+题目

贪心算法 跳跃游戏跳跃游戏2 跳跃游戏 题目 拿到题目就暴力穷举,我用的是dfs,加上备忘录之后还是超出时间限制。就考虑一下贪心算法。你想 我在[0,n-2]位置遍历求出可以跳跃的最远距离,用farthest更新最大值,如果>终点就返回t…

Go红队开发—文件操作

文章目录 文件操作创建目录创建文件获取File信息文件重命名删除文件打开关闭文件判断文件是否存在判断文件是否有读取权限复制文件Read读取ReadFull读取ReadAtLeast读取ReadAll读取bufio读取Write写入WriteFile快速写入临时文件目录下载文件文件指针操作修改文件权限/拥有者/时…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源: 1. 精度更高,误差更小 ADR03B 具有 0.1% 或更小的初始精度,而 电阻分压方式的误差主要来自电阻的容差(通常 1% 或 0.5%)。长期稳定性更好,分压电阻容易受到温度、老化的影响,长…

java入门-方法(超详细)

第一章 方法的介绍和基本使用 1.方法介绍以及简单方法定义(无参无返回值) 1.问题描述: 之前所有的代码都在main方法中写,如果我们将来将所有功能的代码都放在main方法中,会显得main方法太乱,不好维护 解决…

前端八股——JS+ES6

前端八股:JSES6 说明:个人总结,用于个人复习回顾,将持续改正创作,已在语雀公开,欢迎评论改正。

Datawhale 数学建模导论二 笔记5 多模数据与智能模型

主要涉及到的知识点有: 数字图像处理与计算机视觉 计算语言学与自然语言处理 数字信号处理与智能感知 10.1 数字图像处理与计算机视觉 视觉信息是我们第一种非常规的数据模式,在Python当中可以使用opencv处理数字图像,并提取出视觉特征用…