目录
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是一种可变的序列,它可以通过调用方法来修改它的值。
在性能方面,当需要进行大量的字符串操作时,StringBuilder比string要快。这是因为每次对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;