.NET 基础知识

带着问题去思考!大家好。

 

修饰符

修饰符有什么作用呢?它是什么东西呢?

首先修饰符有四种

  • private[ˈpraɪvət]   
  • protected [prə'tektɪd]  
  • internal [ɪnˈtɜːnl]
  • public [ˈpʌblɪk] 

他们的特效依次是:

private   修饰符用于设置类或类成员的访问权限仅为所属类的内部, private也被称为私有修饰符。某些时候需要访问私有类成员时,可通过 get 和 set 访问器读取或修改。

protected    修饰符用于设置类或类成员的访问权限仅为所属类及子类的内部.

internal     修饰符修饰的类或类成员的访问权限为同一程序集内部,C# 默认的类访问修饰符即为 internal。

面向对象编程的特征之一就是封装性, 而类就是封装性的典型体现。在生活中,人们不需要知道电器的内部构造, 但是能很容易地使用电器, 这就是封装性。 在项目中需要编写很多功能类, 在程序运行时只需要使用类所提供的功能, 大部分类内部的代码 实现 需要封装, 拒绝外部访问。 这样大大增加了类的内部代码 安全性和稳定性, 同时多个功能类之间也减少了互相干扰的可能。 访问权限修饰符即可将类及类的成员划分多种 安全 级别, 根据 不同 需要 设置 访问 权限。 internal 和 public 访问 修饰符是需要谨慎选择的, 多数情况下应该尽量使用 internal 访问修饰符。 还有 一种 访问 修饰 符,

即 protected internal 修饰符, 可在子类中或同一程序集内被访问。如果要声明成员只能被同一 程序集内的派生(子类)访问, 则应首先设置 所属类为 internal,成员设置 为 protected。

方法的重载和重写(override)

 重载和重写的区别?

重载是方法的名称相同, 函数签名不同, 进行多次重载以适应不同的需要。 而重写( override) 是进行基类中函数的扩展或改写

值类型和引用类型

他们的区别是什么?

值类型包含数据,引用类型变量只包含数据的内存地址。值类型只要离开其定义的作用域,将从内存中消除,而引用类型引用的对象一直存留在托管堆

接口和抽象类 

interface abstract [ˈæbstrækt] 

接口和抽象类是什么?为什么他们一起说?他们的共同点是什么?又有什么区别?

接口和抽象类非常相似,两者都无法实例化,并且未实现部分都由派生类实现

区别:

.NET 基础知识

抽象类的类体中可包含试的成员,而未实现的成员为抽象成员。抽象方法或属性本事就是隐性的[1]virtual [ˈvɜːtʃuəl].所以派生类实现抽象方法或属性必须使用override关键字。

继承抽象类的类如果 没有完全实现抽象成员, 仍然只能是抽象类, 即派生的非抽象类必须完全实现抽象成员。 抽象类也可以实现接口, 这时抽象类必须实现所有的接口成员, 也可以将继承的接口成员映射至抽象成员, 并由其派生类来实现。 说明: 抽象类的抽象成员不能使用 [1]virtual [ˈvɜːtʃuəl].或 static 修饰。

this和base有什么作用?

this关键字用于引用类的当前 实例。 base 关键字用于派生类访问基类成员。

堆和栈

栈指堆栈,堆指托管堆。两者是程序可用内存的两个区域,其中堆栈可用于存储非实例成员的值类型数据, 以及引用类型的变量( 用于存储引用类型实例), 而托管堆可用于 存储引用类型实例的数据及相关信息。不但存储内容不同, 堆栈和托管堆的内存分配方式也不同。

.NET 基础知识

.NET 基础知识

  1.  一般我们不需要管内存管理,因为有CLR.
  2. 堆栈和托管堆用于存储. NET程序中的值类型和引用 类型 数据。 程序代码中声明一个值类型变量 时, CLR 直接在堆栈中分配可用的的空间给该变量。 当代码中声明一个引用 类型 的 变量 时, 该变量只是一个指向 null 的 空 引用, 并且该用同样存储在堆栈上。
  3. 如果使用 new 运算符 创建 引用 类型 的 实例 时, CLR 将在托管堆中分配可用的空间给该实例, 这个 实例 无法 直接 访问。一般 将 用 new 创建 的 实例 赋值 给 某个 引用 类型的变量 时, 该变量将保存指向这个实例的内存 地址。 由此可知, 堆栈和托管堆是程序 可用内存空间的两个 区域。 堆栈可用于存储非对象的值类型数据和引用类 实例 的地址引用, 而托管堆可用于存储 由 new 创建 的 引用类型实例, 引用 类型 变量 可 存储 实例 的 地址 引用, 以达到访问实例的目的。
  4. 不过堆栈的数据清除和托管堆的数据清除有很大的不同, 堆栈的值类型数据在超出作用域时将被清除。 而 托管 堆 中的 实例 只有 在 没有 被 任何 变量 引用 时, 才可 能在 未来 某个 时间 被 清除, 托管堆的数据清除 交给垃圾收集器( GC) 完成。

 Sealed修饰符

 sealed [sild]

密封类一般情况下的使用方法和其他类一样,只是无法被继承,密封类可用于单一功能的实现,防止被意外地继承。

sealed修饰符实例方法和属性,必须和override一起使用。

静态类和静态成员

当类中某些成员不需要创建实例实现,可将其声明为静态类成员。静态成员访问类名而非对象名,this 关键字也无法访问静态成员时直接引用,这些成员可用作该类的多个对象共享数据。

静态类无法new创建对象,所以不能编写构造函数。

 

.NET 基础知识


上一篇:实现一对一直播app开发的发展,提升平台竞争力


下一篇:婚恋系统源码,相亲直播的优点和难点有哪些