1. 简要分析 out
参数、ref
参数、in
参数的区别
out
参数:
- 用于将数据从方法传回调用者。
- 在方法内部,
out
参数必须被赋值。 - 调用方法时,不需要为
out
参数提供初始值。void Method(out int result) { result = 10; }
ref
参数: - 用于在方法内外共享数据。
- 在方法内部,
ref
参数不需要被赋值。 - 调用方法时,必须为
ref
参数提供初始值。void Method(ref int value) { value += 10; }
in
参数: - 用于将数据传入方法,但不允许在方法内部修改。
- 调用方法时,必须为
in
参数提供初始值。void Method(in int value) { Console.WriteLine(value); }
2. 简单解释
continue
和break
的区别?const
和readonly
有什么区别?continue
和break
的区别:continue
:跳过当前循环迭代,继续下一次循环。
for (int i = 0; i < 10; i++) { if (i % 2 == 0) continue; // 跳过当前迭代 Console.WriteLine(i); }
break
:终止当前循环,跳出循环结构。
for (int i = 0; i < 10; i++) { if (i == 5) break; // 跳出循环 Console.WriteLine(i); }
const
和readonly
的区别:const
:编译时常量,值在编译时确定,必须在声明时赋值,且值不能更改。const int ConstValue = 10;
readonly
:运行时常量,值在运行时可以通过构造函数赋值,但之后不能更改。
readonly int ReadOnlyValue; public MyClass(int value) { ReadOnlyValue = value; }
3. 简述什么是隐式转换和显式转换?
隐式转换:
- 编译器自动完成的数据类型转换,无需显式指定转换。
- 通常用于从较小范围类型转换到较大范围类型。
int intValue = 10; double doubleValue = intValue; // 隐式转换
显式转换:
- 需要通过强制转换操作符显式指定的数据类型转换。
- 通常用于从较大范围类型转换到较小范围类型。
double doubleValue = 10.5; int intValue = (int)doubleValue; // 显式转换
4. 请简要说明 C# 中常用数据类型有哪些?值类型和引用类型在 C# 中的区别?
-
常用数据类型:
- 值类型:
- 数值类型:
int
,double
,float
,decimal
- 布尔类型:
bool
- 字符类型:
char
- 结构体:
struct
- 枚举:
enum
- 数值类型:
- 引用类型:
- 字符串:
string
- 数组:
array
- 类:
class
- 接口:
interface
- 委托:
delegate
- 字符串:
- 值类型:
-
值类型和引用类型的区别:
- 值类型:
- 直接存储数据值。
- 在栈上分配内存。
- 赋值时,创建的是副本。
- 引用类型:
- 存储的是数据的引用或地址。
- 在堆上分配内存。
- 赋值时,创建的是引用。
- 值类型:
5. 请简要说明 C# 中方法的重载(overload)和重写(override)的区别
方法重载(overload):
- 同一类中多个方法具有相同名称,但参数列表不同(参数类型或数量不同)。
- 编译时多态性
public void Print(int value) { Console.WriteLine(value); } public void Print(string value) { Console.WriteLine(value); }
方法重写(override):
- 子类重新定义父类中已定义的方法,必须使用
override
关键字。 - 运行时多态性。
public class BaseClass { public virtual void Print() { Console.WriteLine("Base class"); } } public class DerivedClass : BaseClass { public override void Print() { Console.WriteLine("Derived class"); } }