C# 面试题:基础 一

1. 字符串中string str=null和string str=””和string str=string.Empty的区别?

string.Empty相当于“”,Empty是一个静态只读的字段。 string str=”” ,初始化对象,并分配一个空字符串的内存空间 string str=null,初始化对象,不会分配内存空间

2. byte b = ‘a’; byte c = 1; byte d = ‘ab’; byte e = ‘啊’; byte g = 256; 这些变量有些错误是错再哪里?

1byte =8bit,1个汉字=2个byte,1个英文=1个byte=8bit
而且只能赋值0~255的数字,如果赋值字符类型需要强制转换
所以只有c是对的

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

string是一种不可变的序列,它的值一旦被赋值就不能更改。

StringBuilder是一种可变的序列,它可以通过调用方法来修改它的值。

在性能方面,当需要进行大量的字符串操作时,StringBuilderstring要快。这是因为每次对string的修改操作都会创建一个新的字符串对象并复制原有字符串的内容,这需要额外的时间和内存。相比之下,StringBuilder在修改内容时只是在原有的内存上进行修改,因此具有更好的性能。

不过,在进行少量字符串操作的情况下,使用string也是可以的,因为这时候差别不是很明显。此外,如果你不需要对字符串进行修改,那么使用string是更好的选择,因为它比StringBuilder更安全。

4.什么是扩展方法?

一句话解释,扩展方法使你能够向现有类型“添加”方法,无需修改类型

按扩展方法必须满足下面条件

  • 必须要静态类中的静态方法
  • 第一个参数的类型是要扩展的类型,
  • 并且需要添加this关键字以标识其为扩展方法
public static class StringExtensions
{
    public static string Reverse(this string s)
    {
        char[] charArray = s.ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
}
string s = "Hello, World!";
string reversed = s.Reverse();  // "!dlroW ,olleH"

5.byte a =255;a+=5;a的值是多少?

答案是:4

6.什么是装箱和拆箱?

装箱就是隐式地将一个值类型转换成引用类型,如:

int a = 1;
object objecta = a;

拆箱就是将引用类型转换成值类型,如:

int b = (int)objecta;

7.值类型和引用类型的区别

值类型存储的是变量的值,它们包括数值类型、枚举类型和布尔类型。例如,当你声明一个 int 类型的变量时,它就是一个值类型变量。

引用类型存储的是对象的地址,它们包括类类型、接口类型、数组类型和委托类型。例如,当你声明一个类的实例时,它就是一个引用类型变量。

有几个明显的区别:

  • 值类型存储在栈内存中,引用类型存储在堆内存中。
  • 值类型直接存储值,引用类型存储的是对象的地址。
  • 值类型的变量不能为 null,引用类型的变量可以为 null。
  • 值类型的变量在赋值时进行值复制,引用类型的变量在赋值时复制的是地址。

8.new关键字的作用?

(1)运算符:创建对象实例

List<int> ints = new List<int>();

(2)修饰符:在派生类定义一个重名的方法,隐藏掉基类方法

public class BaseClass
{
    public virtual void DoWork()
    {
        Console.WriteLine("BaseClass.DoWork");
    }
}

public class DerivedClass : BaseClass
{
    public new void DoWork()
    {
        Console.WriteLine("DerivedClass.DoWork");
    }
}

// 输出 "DerivedClass.DoWork"
DerivedClass derived = new DerivedClass();
derived.DoWork();

(3)约束:泛型约束定义,约束可使用的泛型类型,参数(T)必须具有一个可调用的无参数构造函数,如:

public class MyClass<T> where T : new()
{
    public T CreateInstance()
    {
        return new T();
    }
}

// 使用 MyClass<T>
MyClass<MyType> obj = new MyClass<MyType>();
MyType instance = obj.CreateInstance();

9.int?和int有什么区别?

int?为可空类型,默认值可以是null

int默认值是0

int?是通过int装箱为引用类型实现

10. C#中的委托是什么?

一句话解释就是:将方法当作参数传入另一个方法的参数。 .net中有很多常见的委托如:Func 、Action 作用:提高方法的扩展性

class Calculator
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}
delegate int CalculatorDelegate(int x, int y);
Calculator calculator = new Calculator();
CalculatorDelegate calculatorDelegate = calculator.Add;

也可以这样

CalculatorDelegate calculatorDelegate = (x, y) => x + y;
此条目发表在C#基础分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注