• .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] 

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

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

    区别:

    抽象类 接口
    只能派生类 派生类和结构,
    派生类(derived class)也可以是抽象类,即抽象类成员在派生类中不一定被完全实现 要求派生类或结构必须完全实现其成员。
    可以包含已经实现的成员,可以包含字段 只包含未实现的成员,不能包含字段。并且接口所含成员必须为public访问级别。
    类只能继承一个抽象类 类可以继承实现多个接口。

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

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

    this和base有什么作用?

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

    堆和栈

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

       
    int i = 0;    
    int j = 1;    
    Cow a = new Cow();   
    Cow b = new Cow();     
    Cow c = b; 
    int ii = i; 
    ii = 10;
    int jj = j;
    

      

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

     Sealed修饰符

     sealed [sild]

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

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

    静态类和静态成员

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

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

    【1】:

     

  • 相关阅读:
    [gj]三国攻势图
    [svc]msmtp+mutt发附件,发邮件给多个人
    [sh]清理memcached缓存
    [svc]jdk1.7.0_13(系列)下载url
    [svc]linux查看主板型号及内存硬件信息
    [svc][op]如何查看当前Ubuntu系统的版本
    [svc][bg]phabricator-zh_CN汉化包
    [na]台式机装原版Win2008R2
    [svc]salt源码安装软件和yum安装软件
    JSTL的相关使用
  • 原文地址:https://www.cnblogs.com/ccaa/p/12521620.html
Copyright © 2020-2023  润新知