编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

C#关键字常见面试题

gowuye 2024-05-16 14:37 3 浏览 0 评论

不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。(文章中有描述不当的地方欢迎文末留言指正,我会及时改正??)

C#访问修饰符

访问修饰符的作用

访问修饰符是用于指定成员或类型的声明可访问性的关键字。

四种常见的访问修饰符

  • public(公共的)
  • protected(受保护的)
  • internal(内部的)
  • private(私有的)

访问修饰符的六种组合及其可访问性级别

  • public 访问不受限制
  • protected 访问限于包含类或派生自包含类的类型
  • internal 访问限于当前程序集
  • private 访问限于包含类
  • protected internal 访问限于当前程序集或派生自包含类的类型访问
  • private protected 访问限于包含类或当前程序集中包含类的派生类的类型访问
//包含类
public class BaseClass
{
private protected int myValue = 0;
}

//当前程序集中包含类的派生类
public class DerivedClass1 : BaseClass
{
void Access()
{
var baseObject = new BaseClass();
myValue = 5;
}
}

C#类和结构默认访问修饰符

Internal

C#适用于类和结构访问修饰符有哪些

public 或 internal

类成员和结构成员的默认访问修饰符为

private

结构成员(包括嵌套的类和结构)可以声明为

public、internal 或 private 注意:结构成员无法声明为 protected、protected internal 或 private protected,因为结构不支持继承。

类成员(包括嵌套的类和结构)可以声明为

public、protected internal、protected、internal、private protected 或 private

参考文章

  1. 访问修饰符(C# 参考):https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/access-modifiers

readonly与const区别?

readonly关键字(运行时常量):字段可以在声明或构造函数中初始化,常作为运行时常量使用。const关键字(编译时常量):字段只能在该字段的声明时初始化,常作为编译时常量使用过。

virtual作用?

详情阅读:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/virtual

virtual关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写(使用override关键字对虚方法重写)。如下是虚方法声明和重写虚方法的示例:

 // 基类虚方法声明
class BaseClass
{
public virtual void Method1()
{
Console.WriteLine("Base - Method1");
}

public virtual void Method2()
{
Console.WriteLine("Base - Method2");
}
}

class DerivedClass : BaseClass
{
// 重写基类中的虚方法
public override void Method1()
{
Console.WriteLine("Derived - Method1");
}

public new void Method2()
{
Console.WriteLine("Derived - Method2");
}
}

override作用?

扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现需要 override 修饰符。

static作用?

详情阅读:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/static

使用 static 修饰符可声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于声明 static 类。在类、接口和结构中,可以将 static 修饰符添加到字段、方法、属性、运算符、事件和构造函数。static 修饰符不能用于索引器或终结器。

静态类与非静态类的区别?

  1. 静态类无法实例化(换句话说,无法使用 new 运算符创建类类型的变量。由于不存在任何实例变量,因此可以使用类名本身访问静态类的成员)。
  2. 静态构造函数只调用一次,在程序所驻留的应用程序域的生存期内,静态类会保留在内存中(即使用Static修饰的类,应用一旦启用静态类就会保留在内存中)。
  3. 静态类只包含静态成员
  4. 不能包含实例构造函数。
  5. 静态类会进行密封,因此不能继承。它们不能继承自任何类(除了 Object)。静态类不能包含实例构造函数。但是,它们可以包含静态构造函数。

静态成员和非静态成员的区别?

成员主要指的是:字段、方法、属性、运算符、事件和构造函数等。

  1. 静态成员用static修饰符,非静态成员不需要。
  2. 静态成员属于类所有,非静态成员属于类的实例化对象所有。
  3. 静态方法里不能使用非静态成员,非静态方法可以使用静态成员。
  4. 每创建一个类的实例,都会在内存中为非静态成员新分配一块新的存储。
  5. 静态成员无论类创建多少个实例,在内存中只占同一块区域。

静态方法的使用场合

  1. 静态方法最适合工具类中方法的定义。
  2. 静态变量适合全局变量的定义。

静态方法和非静态方法区别(优/缺点)?

优点

  1. 属于类级别的,不需要创建对象就可以直接使用。
  2. 全局唯一,内存中唯一,静态变量可以唯一标识某些状态。
  3. 在类加载时候初始化,常驻在内存中,调用快捷方便。

缺点

  1. 静态方法不能调用非静态的方法和变量。(非静态方法可以任意的调用静态方法/变量
  2. 不可以使用 this 引用 static 方法或属性访问器。

sealed 关键字有什么作用?

sealed 关键字用于修饰类、方法或属性,表示该类或成员不可被继承或重写。如果一个类被声明为 sealed,其他类不能继承该类;如果一个方法或属性被声明为 sealed,其他类不能重写该方法或属性。

this 关键字有什么作用?

this 关键字表示当前对象的引用,可以用于访问当前对象的成员。它可以用来区分局部变量和实例变量、在构造函数中调用其他构造函数、传递当前对象给其他方法等。

base 关键字有什么作用?

base 关键字表示基类的引用,可以用于访问基类的成员。它可以用来在子类中调用基类的构造函数、调用基类的方法或属性等。

sizeof 关键字有什么作用?

sizeof 运算符返回给定类型的变量所占用的字节数。sizeof 运算符的参数必须是一个非托管类型的名称,或是一个限定为非托管类型的类型参数。

lock 关键字有什么作用?

lock 关键字用于在多线程环境下对共享资源进行互斥访问。使用 lock 关键字可以将代码块标记为临界区,使得只有一个线程能够进入临界区执行代码。

async 和 await 关键字有什么作用?

async 和 await 关键字用于异步编程。通过使用 async 标记方法和 await 等待异步操作完成,可以实现在异步任务执行过程中不阻塞主线程。

delegate 关键字有什么作用?

delegate 关键字用于声明委托类型,即代表一个或多个方法的对象。使用 delegate 可以实现事件和回调机制,简化方法的调用和管理。

using关键字的作用

  1. using指令为命名空间创建别名,或导入在其他命名空间中定义的类型
  2. using 语句定义一个范围,在此范围的末尾将释放对象资源,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源。

C# 中的 in 关键字有什么作用?

in 关键字用于参数传递时,将参数按只读引用传递。使用 in 关键字可以提高性能,避免不必要的参数复制。

在 C# 中,in 关键字用于将参数标记为输入参数。它告诉编译器在方法调用过程中不会修改该参数的值,并且可以通过引用传递避免对参数进行复制。这对于大型结构或对象参数非常有用,因为直接引用参数可以提高性能和内存效率。

class Program
{
static void Main(string[] args)
{
int x = 5;
MultiplyByTwo(in x);
Console.WriteLine(x); // 输出 5
}

static void MultiplyByTwo(in int number)
{
// 无法修改 in 参数的值
// number *= 2; // 编译错误

// 仅能读取 in 参数的值
Console.WriteLine(number * 2); // 输出 10
}
}

C# 中的 ref 关键字有什么作用?

  • 参数在使用 ref 关键字进行引用传递时,必须在方法调用之前对其进行初始化。
  • ref 关键字既可以在进入方法之前初始化参数的值,也可以在方法内部对参数进行修改。
  • ref 参数在进入方法时保持原始值,并在方法结束后将值带回到调用处。

C# 中的 out 关键字有什么作用?

  • 参数在使用 out 关键字进行引用传递时,不需要在方法调用之前进行初始化。
  • out 关键字通常用于表示方法返回多个值的情况,或者用于修改方法外部的变量。
  • out 参数必须在方法内部进行初始化,并确保在方法结束前完成赋值操作。方法内部没有为 out 参数赋值的情况下,方法调用将会导致编译错误。

C#中参数传递 ref与out 的区别?

ref 指定此参数由引用传递,指定的参数在函数调用时必须先初始化(有进有出)。out 指定此参数由引用传递,指定的参数在进入函数时会清空参数值,因此该参数必须在调用函数内部进行初始化赋值操作(无进有出)。

总结:

  • ref 和 out 都用于引用传递参数。
  • ref 参数在方法调用前必须被初始化,而 out 参数不需要。
  • ref 参数可以保留原始值并在方法内部进行修改,而 out 参数必须在方法内部进行初始化赋值。

不能将 in、ref 和 out 关键字用于以下几种方法:

  • 异步方法,通过使用 async 修饰符定义。
  • 迭代器方法,包括 yield return 或 yield break 语句。
  • 扩展方法的第一个参数不能有 in 修饰符,除非该参数是结构。
  • 扩展方法的第一个参数,其中该参数是泛型类型(即使该类型被约束为结构。)

as和is的区别

  1. is 只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回,对象为也会返回false。
  2. as运算符将表达式结果显式转换为给定的引用类型或可以为值的类型。如果无法进行转换,则as运算符返回 。

总结:as模式的效率要比is模式的高,因为借助is进行类型转换的化,需要执行两次类型兼容检查。而as只需要做一次类型兼容,一次检查,检查要比类型兼容检查快。

是什么类型?

关键字是表示不引用任何对象的空引用的文字值。是引用类型变量的默认值。普通值类型不能为 ,可为空的值类型除外。

new关键字的作用?

  1. 运算符:创建类型的新实例
  2. 修饰符:可以显式隐藏从基类继承的成员。
  3. 泛型约束:泛型约束定义,约束可使用的泛型类型。

return、continue、break的区别?

return:

结束整个方法,return关键字并不是专门用于跳出循环的,return的功能是结束一个方法。一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

continue:

结束本次循环,然后持续进行下一次循环。

break:

break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。

相关推荐

R语言数据挖掘实践——支持向量机的常用函数
R语言数据挖掘实践——支持向量机的常用函数

e1071包是R语言中用于支持向量机建模与分析的软件包,其主要用于支持向量机的模型构建,提供核心函数svm()来建立支持向量机的基础模型,并且可辅助使用pred...

2024-05-18 12:15 gowuye

R数据分析:如何做聚类分析,实操解析
R数据分析:如何做聚类分析,实操解析

Clusteringisabroadsetoftechniquesforfindingsubgroupsofobservationswi...

2024-05-18 12:14 gowuye

用R语言做数据分析——马赛克图
用R语言做数据分析——马赛克图

到目前为止,我们已经学习了许多可视化定量或连续型变量间关系的方法。但如果变量是类别型的呢?若只观察单个类别型变量,可以使用柱状图或者饼图;若存在两个类别型变量,...

2024-05-18 12:14 gowuye

用R语言做数据分析——方差分析基本概论
用R语言做数据分析——方差分析基本概论

在实际工作中,影响一件事的因素是很多的,我们总是希望通过各种试验来观察各种因素对试验结果的影响。例如,不同的生产厂家、不同的原材料、不同的操作规程,以及不同的技...

2024-05-18 12:14 gowuye

R语言数据分析实战:数据清洗与可视化
R语言数据分析实战:数据清洗与可视化

《R语言数据分析实战:数据清洗与可视化》是一本深入浅出的实践指南,专为对数据分析感兴趣的读者精心编撰。本书旨在帮助读者掌握R语言这一强大的统计分析工具,通过实例...

2024-05-18 12:13 gowuye

用R语言做数据分析——双因素方差分析
用R语言做数据分析——双因素方差分析

在双因素方差分析中,受试者被分配到两因子的交叉类别组中。以基础安装中的Tooth-Growth数据集为例,随机分配60只豚鼠,分别采用两种喂食方法(橙汁或维生素...

2024-05-18 12:13 gowuye

用R语言做数据分析——独立两样本和K样本检验
用R语言做数据分析——独立两样本和K样本检验

coin包简介对于独立性问题,coin包提供了一个进行置换检验的一般性框架,通过这个包,我们可以回答如下问题:响应值与组的分配独立吗?两个数值变量独立吗?两个类...

2024-05-18 12:13 gowuye

用R语言做数据分析——用回归做方差分析
用R语言做数据分析——用回归做方差分析

之前提到方差分析和回归都是广义线性模型的特例,之前文章的所有设计都可以用lm()函数来分析。为了更好地理解输出结果,需要弄明白在拟合模型时,R语言是如何处理类别...

2024-05-18 12:13 gowuye

数据分析R语言——数据结构
数据分析R语言——数据结构

数据分析R语言——数据结构数组数组(array)与矩阵类似,但是维度可以大于2.数组通过array()函数创建。形式如;myarray<-array(v...

2024-05-18 12:13 gowuye

R语言数据挖掘实践——关联分析的常用函数
R语言数据挖掘实践——关联分析的常用函数

arules和arulesViz是R语言中两个专用于关联分析的软件包。其中arules用于关联规则的数字化生成,提供Apriori和Eclat这两种快速挖掘频繁...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——判别分析的常用函数
R语言数据挖掘实践——判别分析的常用函数

判别算法在R语言中实现主要涉及4个软件包中的相关函数,它们依次为MASS、klaR、class和kknn。其中MASS包含有大量实用而先进的统计计数函数及适用数...

2024-05-18 12:12 gowuye

用R语言读取Excel、PDF和JSON文件,终于有人讲明白了
用R语言读取Excel、PDF和JSON文件,终于有人讲明白了

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——聚类分析的常用函数
R语言数据挖掘实践——聚类分析的常用函数

使用R语言可以轻松实现聚类分析,stats、cluster、fpc和mclust是常用的四个聚类分析软件包。stats主要包含一些基本的统计函数,如用于统计计算...

2024-05-18 12:12 gowuye

用R语言做数据分析——时间序列分类
用R语言做数据分析——时间序列分类

时间序列分类是根据已标注的时间序列建立一个分类模型,然后使用分类模型预测未标记时间序列的类别。从时间序列中抽取出新特征肯呢个有助于提高分类模型的性能。特征提取技...

2024-05-18 12:11 gowuye

一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
一文看懂用R语言读取Excel、PDF和JSON文件(附代码)

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:11 gowuye

取消回复欢迎 发表评论: