DotNET知识点总结三(笔记整合)
- 使用接口的注意事项:
- 接口中的成员不能加访问修饰符
- 接口中的成员不能有任何实现
- 实现接口的子类必须实现接口的全部成员
- 一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么在语法上A必须写在IA的前面,因为类是单继承的,而而接口可以多实现
- 显式实现接口和隐式实现接口时需要注意的问题(我们通常是隐式实现的)
- 类实现接口,可以显式实现接口里的方法,但是注意:一旦使用显式实现接口里的方法,那么该方法只能被接口变量调用
IFlyable fly = new Bird();
fly.Fly(); //正确 Bird fly = new Bird();
fly.Fly(); //错误
- 类实现接口,可以显式实现接口里的方法,但是注意:一旦使用显式实现接口里的方法,那么该方法只能被接口变量调用
- 向上转型
- 单一职责原则(避免定义体积庞大的接口,因为这样会造成“接口污染”,只把相关联的一组成员定义到一个接口中)
- 接口与抽象类的区别:
- 相同点:
- 接口和抽象类都不能被实例化
- 不同点:
- 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件和方法
- 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。MicroSoft的自定义接口总是狗带able字段,证明其是表述一类“我能做……”
- 接口可以被多重实现,抽象类只能被单一继承
- 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
- 抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口时为了满足外部调用而定义的一个功能约定,因此反映的是事物的外部特性
- 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法
- 接口可以用于支持回调,而继承并不具备这个特点
- 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
- 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而抽象类的子类中实现接口中方法
- 相同点:
3. 类型转换
- 转换分类
//隐式转换
int num = ;
string str = num.toString(); //强制转换
int a = ;
(double) b = a; - 转换条件
- ToString()方法
- 它是Object对象的一个虚方法,可以自己去重写该方法。如果不重写就返回类型名
- Parse()和TryParse()方法
- 相同点:都是针对于字符串进行的值类型转换
- 不同点:
- 返回值不一样:Parse()是返回要转换的类型,而TryParse()返回一个转换是否成功的bool值
- Parse()转换失败会抛异常,而TryParse()转换失败返回false,不会抛异常
- Parse()直接传入要转换的类型的值,而TryParse()需要一个out输出参数输出转换的结果
- ToString()方法
- 转换分类
4.静态成员
- 加载时机(什么时候加载静态成员?)
- 在该静态成员第一次被调用的时候加载
- 适用情形(什么时候用静态成员)
- 在整个程序内部共享的数据才定义为静态的。通常被作为工具类使用。比如DBSqlHelper
- 在普通类和静态类中的区别
- 静态类需要用static,静态类不能被实例化
- 静态诶中只能包含静态成员
- 在实例方法中可以直接调用静态成员,但在静态方法中不能直接调用实例方法
- 静态类和静态变量创建后始终使用同一块内存,而使用实例的方法会创建多个内存空间
- 惊天构造函数不能有参数,也不能与访问修饰符(默认是private)
- 加载时机(什么时候加载静态成员?)
5.静态类的继承
- 从子类的角度:静态类不能被任何类继承
- 从父类的角度:静态类只能继承Object类,不能继承其他类
6.类和成员的访问修饰符
- 类的默认访问修饰符是internal
- 类的成员的默认访问修饰符是private
- 类的访问修饰符只有两种:public,internal(默认)
- 类的成员的访问修饰符有:public,protected,private(默认)
7.结构
- 本质是值类型
- 值类型和引用类型的选择
- 值类型:主要是用来封装一组数据,并为数据提供一种简单的处理方式
- 引用类型:
- 主要用来封装数据和行为
- 使用面向对象的特征
- 当类型中的成员比较多的时候用结构(存在堆里)
- new关键字的作用
- 在使用new关键字创建对象后,所有的成员变量都已经存在,并有默认值(值类型)
- 如果没有用new关键字,则需要程序员手动为所有的用到了的成员变量赋值,之后才能调用结构对象里的方法属性
- 结构不new也可以使用,但是必须给使用的结构成员赋值才能使用
8.类和结构的区别
- 结构是值类型,是分配在内存的栈上的,而类是引用类型,是分配在内存的堆上的
- 结构不能被继承,因为结构是值类型,隐式继承自System.ValueType
- 结构是是值传递的(赋值传递),而类是引用传递的
9.访问级别的约束
- 子类的访问级别不能比父类高
- 方法参数的访问级别 >= 方法的访问级别(比如当方法的参数传递的是一个类的对象时,那么此时这个类对象的访问级别要高于当前方法的访问级别)
10.析构函数
- 一个类只能有一个析构函数
- 无法继承或重载析构函数
- 无法手动去调用析构函数,因为它是被GC(垃圾回收机制)自动调用的
- 析构函数不能有访问修饰符,也不能有参数
- 不能在结构体中定义析构函数,因为结构是值类型,而值类型是存储在栈中,栈中的数据用完之后就立即销毁了,而析构函数的目的就是用来释放资源的,一般存储在堆中的引用类型才需要GC去释放,而因结构体中不能定义析构函数,所以只能对类使用析构函数
//析构函数语法 class MyDispose
{
~MyDisPose()
{
……//释放资源的代码
}
}
11.字符串
- 属性:length
- 静态方法
- 常用:
- (Last)IndexOf:用来查找某个字符或字符串,在一个特定字符串对象里的下标
- SubString 截取
- Split() 根据特定字符来分割字符串,并返回分割后的字符串的数组,可以用foreach读取
- Join静态方法
- Format() 静态方法
- Replace(),替换完要接收,产生一个新的字符串
- Replace().Replace()链式编程
- 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知识点总结三(笔记整合)的更多相关文章
- spring与mybatis三种整合方法
spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...
- Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景
博客说明 所有刊发内容均可转载但是需要注明出处. 三种整合数据至Streamr的典型场景 本系列文档主要介绍怎么通过Streamr管理自己的DATA,整个系列包括三篇教程文档,分别是:教你5分钟上传数 ...
- dotnet 读 WPF 源代码笔记 布局时 Arrange 如何影响元素渲染坐标
大家是否好奇,在 WPF 里面,对 UIElement 重写 OnRender 方法进行渲染的内容,是如何受到上层容器控件的布局而进行坐标偏移.如有两个放入到 StackPanel 的自定义 UIEl ...
- DotNET知识点总结四(笔记整合)
1.枚举:本质是类 如果为第一个枚举赋了一个int值,那么后面的枚举项依次递增 可以将枚举强转成他所代表的int值 C#的枚举项都是常量(可以用Reflector查看literal的IL源码) 因为枚 ...
- DotNET知识点总结五(笔记整合)
1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delega ...
- C/C++编程笔记:C语言入门知识点(三),请收藏C语言最全笔记!
今天我们继续来学习C语言的入门知识点,第一课:C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记! 21. 输入 & 输出 当我们提到输入时,这意味着要向程序填充一些数据.输入可 ...
- Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)
三.Spring-Mybatis的整合思路
- .NET知识点总结一(笔记整合)
1. .net framework原理简介,C#程序的两次编译 .NET源代码——>语言编译器(第一次编译)——>MSIL+元数据(exe文件)——>CLR(公共语言运行时——类 ...
- 前端新人学习笔记-------html/css/js基础知识点(三)
这断时间家里有点事,上班也有点任务,所以几天没看视频没来更新了.今天来更新一下了. 一:默认样式重置 但凡是浏览默认的样式,都不要使用. body,p,h1,h2,h3,h4,h5,h6,dl,dd{ ...
随机推荐
- Delphi对ini文件的操作
一.INI文件的结构:; 注释[小节名]关键字=值 INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. 值的类型有三种:字符串.整型数值和布尔值.其中字符串存贮在INI ...
- Android的JNI开发
变量的定义 int i; typedef int x;//定义一个int x数据类型 x a=10; printf("size=%d",sizeof(i));//获取int类型长度 ...
- [Java] LinkedList / Queue - 源代码学习笔记
简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口 ...
- Java中List转换为数组,数组转List
今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本.如下: ArrayList<String> list=new ArrayList<String>(); ...
- HTTP学习笔记4-请求与响应结构例子
18,HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成.请求消息和响应消息都是由开始行,消息报头(可选的),空行(只有CRLF的行),消息正文(可选的)组成. 19,对于请求消息,开始行就 ...
- QT 仓库管理系统 开放源代码
IT 要走多久,要怎么走. IT 要走多久,要怎么走.这些问题,在我已经快毕业了一个年头的如今,又又一次浮如今我的脑海里.一边是工作的了了模块,一边是能够自己无聊打发的时间.这不是我当初要的路,如今的 ...
- linux elinks命令
Elinks是基于文本的免费浏览器,用于Unix及基于Unix的系统.Elinks支持 HTTP,HTTP Cookies以及支持浏览Perl和Ruby脚本.也很好的支持选项卡浏览.最棒的是它支持鼠标 ...
- jQuery 第一阶段 学习使用总结
jQuery 是一个 JavaScript 库,位于一个 JavaScript 文件中,其中包含了所有的 jQuery 函数.在平常的使用过程中,会常常与JavaScript,配合css使用,能够令网 ...
- Java多线程——线程同步
在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系.可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题.现在就来学习多线程对数据访问的 ...
- CSS权威指南学习笔记系列(1)CSS和文档
题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...