1. 使用接口的注意事项:
    • 接口中的成员不能加访问修饰符
    • 接口中的成员不能有任何实现
    • 实现接口的子类必须实现接口的全部成员
    • 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么在语法上A必须写在IA的前面,因为类是单继承的,而而接口可以多实现
    • 显式实现接口和隐式实现接口时需要注意的问题(我们通常是隐式实现的)
      • 类实现接口,可以显式实现接口里的方法,但是注意:一旦使用显式实现接口里的方法,那么该方法只能被接口变量调用

        IFlyable fly = new Bird();
        fly.Fly(); //正确 Bird fly = new Bird();
        fly.Fly(); //错误
    • 向上转型
    • 单一职责原则(避免定义体积庞大的接口,因为这样会造成“接口污染”,只把相关联的一组成员定义到一个接口中)
  2. 接口与抽象类的区别:
    • 相同点:

      • 接口和抽象类都不能被实例化
    • 不同点:
      • 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件和方法
      • 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。MicroSoft的自定义接口总是狗带able字段,证明其是表述一类“我能做……”
      • 接口可以被多重实现,抽象类只能被单一继承
      • 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
      • 抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口时为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性
      • 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法
      • 接口可以用于支持回调,而继承并不具备这个特点
      • 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
      • 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而抽象类的子类中实现接口中方法

3.  类型转换

    • 转换分类

      //隐式转换
      int num = ;
      string str = num.toString(); //强制转换
      int a = ;
      (double) b = a;
    • 转换条件
      • ToString()方法

        • 它是Object对象的一个虚方法,可以自己去重写该方法。如果不重写就返回类型名
      • Parse()和TryParse()方法
        • 相同点:都是针对于字符串进行的值类型转换
        • 不同点:
          1. 返回值不一样:Parse()是返回要转换的类型,而TryParse()返回一个转换是否成功的bool值
          2. Parse()转换失败会抛异常,而TryParse()转换失败返回false,不会抛异常
          3. Parse()直接传入要转换的类型的值,而TryParse()需要一个out输出参数输出转换的结果

4.静态成员

    • 加载时机(什么时候加载静态成员?)

      • 在该静态成员第一次被调用的时候加载
    • 适用情形(什么时候用静态成员)
      • 在整个程序内部共享的数据才定义为静态的。通常被作为工具类使用。比如DBSqlHelper
    • 在普通类和静态类中的区别
      • 静态类需要用static,静态类不能被实例化
      • 静态诶中只能包含静态成员
      • 在实例方法中可以直接调用静态成员,但在静态方法中不能直接调用实例方法
      • 静态类和静态变量创建后始终使用同一块内存,而使用实例的方法会创建多个内存空间
      • 惊天构造函数不能有参数,也不能与访问修饰符(默认是private)

5.静态类的继承

    • 从子类的角度:静态类不能被任何类继承
    • 从父类的角度:静态类只能继承Object类,不能继承其他类

6.类和成员的访问修饰符

    • 类的默认访问修饰符是internal
    • 类的成员的默认访问修饰符是private
    • 类的访问修饰符只有两种:public,internal(默认)
    • 类的成员的访问修饰符有:public,protected,private(默认)

7.结构

    • 本质是值类型
    • 值类型和引用类型的选择
      • 值类型:主要是用来封装一组数据,并为数据提供一种简单的处理方式
      • 引用类型:
        1. 主要用来封装数据和行为
        2. 使用面向对象的特征
        3. 当类型中的成员比较多的时候用结构(存在堆里)
    • new关键字的作用
      • 在使用new关键字创建对象后,所有的成员变量都已经存在,并有默认值(值类型)
      • 如果没有用new关键字,则需要程序员手动为所有的用到了的成员变量赋值,之后才能调用结构对象里的方法属性
      • 结构不new也可以使用,但是必须给使用的结构成员赋值才能使用

8.类和结构的区别

    • 结构是值类型,是分配在内存的栈上的,而类是引用类型,是分配在内存的堆上的
    • 结构不能被继承,因为结构是值类型,隐式继承自System.ValueType
    • 结构是是值传递的(赋值传递),而类是引用传递的

9.访问级别的约束

    • 子类的访问级别不能比父类高
    • 方法参数的访问级别   >=   方法的访问级别(比如当方法的参数传递的是一个类的对象时,那么此时这个类对象的访问级别要高于当前方法的访问级别)

10.析构函数

    • 一个类只能有一个析构函数
    • 无法继承或重载析构函数
    • 无法手动去调用析构函数,因为它是被GC(垃圾回收机制)自动调用的
    • 析构函数不能有访问修饰符,也不能有参数
    • 不能在结构体中定义析构函数,因为结构是值类型,而值类型是存储在栈中,栈中的数据用完之后就立即销毁了,而析构函数的目的就是用来释放资源的,一般存储在堆中的引用类型才需要GC去释放,而因结构体中不能定义析构函数,所以只能对类使用析构函数
      //析构函数语法
      
      class MyDispose
      {
      ~MyDisPose()
      {
      ……//释放资源的代码
      }
      }

11.字符串

    • 属性:length
    • 静态方法
      • 常用:
        1. (Last)IndexOf:用来查找某个字符或字符串,在一个特定字符串对象里的下标
        2. SubString 截取
        3. Split() 根据特定字符来分割字符串,并返回分割后的字符串的数组,可以用foreach读取
        4. Join静态方法
        5. Format() 静态方法
        6. Replace(),替换完要接收,产生一个新的字符串
        7. Replace().Replace()链式编程
        8. Trim()去首尾空格

12.“==”运算符好 “Equals()”方法的区别

    • “==”比较时:

      • 如果比较是值类型,则比较两个对象的值
      • 如果比较的是引用类型,则比较两个对象的引用地址是否相同(比较堆地址)
    • “Equals()”比较时:
      • 此方法是Object类里的一个虚方法,默认就是用的“==”及进行比较,是对“==”进行的一个封装,但是,大部分MicroSoft的类及用户自定义的类,都重写了该虚方法,也就是MicroSoft和用户各自为自己编写的Object的子类定义了相等比较规则

    注意:这里有一个特例,因为string是一个引用类型,所以按理说string.Equals("……")方法比较的是地址,而这里比较的是字符串的值

13.字符串的恒定性:

    当字符串在内存中已经被创建后,程序员再次创建相同值的字符串对象时,CLR做了优化,直接把第一个字符串的引用赋给了第二个变量,也就是说,前后两个字符串变脸保存了相同的字符串对象应用

14.StringBuilder对象

    String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不 会 。 所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder , 不要使用 String。如果要操作一个不断增长的字符串,尽量不用 String 类 , 改用 StringBuilder 类。

    两个类的工作原理不同 :String 类是一种传统的修改字符串的方式 , 它确实可以完成把一个字符串添加到另一个字符串上的工作没错 , 但是在 .NET 框架下 , 这个操作实在是划不来 。 因为系统先是把两个字符串写入内存 , 接着删除原来的 String 对象 , 然后创建一个 String 对象 , 并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间。而使用 System.Text 命名空间下面的StringBuilder 类就不是这样了,它提供的 Append 方法,能够在已有对象的原地进行字符串的修改,简单而且直接。当然 , 一般情况下觉察不到这二者效率的差异 , 但如果你要对某个字符串进行大量的添加操作,那么 StringBuilder 类所耗费的时间和 String 类简直不是一个数量级的。

DotNET知识点总结三(笔记整合)的更多相关文章

  1. spring与mybatis三种整合方法

    spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...

  2. Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景

    博客说明 所有刊发内容均可转载但是需要注明出处. 三种整合数据至Streamr的典型场景 本系列文档主要介绍怎么通过Streamr管理自己的DATA,整个系列包括三篇教程文档,分别是:教你5分钟上传数 ...

  3. dotnet 读 WPF 源代码笔记 布局时 Arrange 如何影响元素渲染坐标

    大家是否好奇,在 WPF 里面,对 UIElement 重写 OnRender 方法进行渲染的内容,是如何受到上层容器控件的布局而进行坐标偏移.如有两个放入到 StackPanel 的自定义 UIEl ...

  4. DotNET知识点总结四(笔记整合)

    1.枚举:本质是类 如果为第一个枚举赋了一个int值,那么后面的枚举项依次递增 可以将枚举强转成他所代表的int值 C#的枚举项都是常量(可以用Reflector查看literal的IL源码) 因为枚 ...

  5. DotNET知识点总结五(笔记整合)

    1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delega ...

  6. C/C++编程笔记:C语言入门知识点(三),请收藏C语言最全笔记!

    今天我们继续来学习C语言的入门知识点,第一课:C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记! 21. 输入 & 输出 当我们提到输入时,这意味着要向程序填充一些数据.输入可 ...

  7. Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)

    三.Spring-Mybatis的整合思路

  8. .NET知识点总结一(笔记整合)

    1.   .net framework原理简介,C#程序的两次编译 .NET源代码——>语言编译器(第一次编译)——>MSIL+元数据(exe文件)——>CLR(公共语言运行时——类 ...

  9. 前端新人学习笔记-------html/css/js基础知识点(三)

    这断时间家里有点事,上班也有点任务,所以几天没看视频没来更新了.今天来更新一下了. 一:默认样式重置 但凡是浏览默认的样式,都不要使用. body,p,h1,h2,h3,h4,h5,h6,dl,dd{ ...

随机推荐

  1. Intellij IDEA 14隐藏被排除的文件夹

    被排除的文件和文件夹以红色显示了. 看着这东西,人一下子就不好了. 还好设置可以改回来. Project tab右上角齿轮,关闭“Show Excluded Files”即可.

  2. selenium webdriver python 开始

    学习资料: Selenium with Python: http://selenium-python.readthedocs.org/en/latest/index.html 乙醇的python se ...

  3. HTTP学习笔记4-请求与响应结构例子

    18,HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成.请求消息和响应消息都是由开始行,消息报头(可选的),空行(只有CRLF的行),消息正文(可选的)组成. 19,对于请求消息,开始行就 ...

  4. finally与return

    finally关键字:和try块使用,一般做资源释放操作,比如关闭流.关闭数据库连接,释放锁. return:用于返回值. finally块可保证一定执行,当逻辑处理有返回值时,会首先执行finall ...

  5. Web —— java web 项目开发 笔记

    1.tomcat 配置虚拟路径:Tomcat下配置虚拟路径管理web项目 发布路径配置( 即虚拟目录配置 )  配置虚拟路径的4种方法 2.

  6. JavaScript 阻止默认时间和冒泡时间

    <!DOCTYPE HTML><html> <head> <title>event cancel</title> </head> ...

  7. ssh远程连接不上ubuntu

    问题描述: 1.ubuntu安装了openssh-server,启动了ssh 守护进程,使用端口22 2.在本机可以 ssh 127.0.0.1 连接 3.通过ssh远程(比如用putty 或crt) ...

  8. linux groupmems命令

    Because users group membership is defined in two different locations, it can be difficult to find ou ...

  9. Annotation注解

    概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包.类. ...

  10. c#将Excel数据导入到数据库的实现代码(转载)

    假如Excel中的数据如下:     数据库建表如下:     其中Id为自增字段:      代码如下: using System; using System.Collections.Generic ...