C# 基础知识问答(一)

1.静态变量与非静态变量的区别

静态变量在类加载的时候进行初始化和分配内存,只有一个实例。通过类来进行访问。

而非静态变量是在对象在实例化的时候进行分配内存,有多个实例。通过对象来进行访问。同一个非静态变量,多个实例中的值是不同。

另外加一句,静态函数成员不能访问非静态成员,如非静态变量,非静态函数。

2.const和static readonly的区别

const

(1)在编译期间解析的常量

(2)必须在声名期间就初始化

(3)既可以修饰类中的成员,也可以修饰函数体内的成员。

static readonly

(1)在运行期间解析的常量

(2)既可以在声名时进行初始化,可以在构造中初始化。

(3)只可以修饰类的成员

静态常量在速度上会稍稍快一些,但是灵活性却比动态常量要差。修改之后要进行重新编译。

3.5种访问修饰符

public

internal

protected

internal protected

private

就internal protected比较特殊一点,同一个程序集的所有类,以及所有程序集的中的子类都可以访问

4.类与结构的区别

(1)从类型上说

结构是值类型,值类型在栈上分配地址,所有的基础类型都是结构类型。

类是引用类型,在堆上分配地址。

结构的赋值将分配产生一个新的对象,类的实例进行赋值指示复制了引用,都指向了一段实际对象分配的内存。

(2)继承性

结构不能被继承,隐式的Sealed,但是结构可以继承接口

结构没有析构函数

(3)如何选择

处理大量的逻辑对象的时候选择类

表现抽象或者多级别的对象层次时,选择类

在大多数情况,该类型只是一些数据时,结构是最佳的选择

5.密封类

防止该类被其他类继承。

(1)不能与abstract修饰在一起使用

(2)密封类的主要作用是防止派生,所以它不能作为基类来使用,所以对密封类成员的调用速度略快。

(3)当应用于方法或者属性的时,sealed修饰符必须与override修饰符一起使用

(4)在密封类中不允许在定义虚函数,但是对于其父类的虚函数会隐式转化成非虚函数。

6.索引器

是一种特殊的类成员,可以使得对象像类似于数组的方式存取。

索引器的索引可以是任意的类型

7.new关键字的有几种用法

(1)new运算符,用于创建对象并调用构造函数

(2)new修饰符

表示隐藏了基类中的同名成员,只能用于继承类中

一般的用法是弥补基类的设计不足

(3)new约束

约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 

new与override的区别

override是覆盖基类的方法,让基类的方法以子类的方法实现,new是定义一个全新的子类的方法,这个方法只属于子类,与基类的方法无关。

8.this问题 

(1)this是指当前对象是自己

(2)把this作为参数传递

(3)在构造函数中,通过this可以调用同一class中别的构造函数

一般的使用方法隐藏同名成员,将对象本身作为参数,声名索引器,判断参数是否为对象本身



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值