第二章主要讲解C#中各种让人模糊不清的概念,用法,类型等等。

1.Equals()与==区别

当比较两个值类型时,二者基本一致,当比较引用类型时,==比较的是引用类型的地址是否一致,即两个引用是否指向同一个堆,Equals()比较的是两个引用指向的堆空间的内容是否一致。注意:当用一个引用类型对象A给另一个引用类型对象B赋值时,并不是复制一份堆,再把B指向堆,而是直接把A的值,即A指向的堆的地址给B,AB指向同一个堆。

2.const与readonly区别

const是编译时确定值,所以它只能用常量赋值。object,Array,struct不能声明为const。

readonly是运行时确定值,可以用变量来赋值,它可以在构造函数中赋值,实现动态的常量表示,更灵活。

3.private,protected,public,internal

(1)private只能类自己内部调用

(2)protected只能类自己和派生自自己的子类调用

(3)public完全开放

(4)internal只能在同一程序集内访问,即在同一个项目内,不是同一个解决方案。

(5)protected internal只能在同一个程序集的类自己和派生自自己的子类调用

4.

sealed将类变为密封类,不能被继承。将方法变成密封方法,不能被重载

new显示隐藏从基类继承的成员,不使用new也能隐藏,但是会警告。

virtual声明虚方法,不具体实现,在子类中实现。

abstract声明抽象类,抽象方法,派生的子类必须实现所有抽象类中未实现的方法。

override覆盖virtual或者abstract修饰的方法

new和override相同点:都能对基类的方法进行隐藏,都可以用base关键字调用基类的成员

new和override不同点:(1)override隐藏的只能是virtual或者abstract修饰的方法,new不必要(2)当使用一个基类调用virtual方法时,如果使用override重写了方法,那么会调用该重写方法,但是用new重写的话还是会调用基类的virtual方法

5.abstract class与interface

6.公共变量与属性的区别

如果使用公共变量,那么可以在类的外部随意的访问控制该成员变量,违背了面向对象中的封装思想。

使用属性,对属性的访问受限于类自身对于属性的设置,不直接操作类的数据内容,而是通过访问器来访问,例如借助于get{}set{}来读取写入数据,还有更多种用法,例如在更改前验证数据等等。

属性是对字段(数据)的封装。

属性可以控制读写,变量不可以。

因此:当我们要把类中的一个值设为public时,尽可能使用属性来代替变量。

7.params,out,ref

params:使得函数的参数的个数是可变的。

void f(params int[] list){..}则下列用法都可以。f(1,2);f(1,2,3);int[] ints={1,2,3};f(ints);

void f(params object[] list){..}f(1,2.23,"123");

out:一个引用传递

使用out修饰参数时,函数的定义和调用时都要显式加out关键字,void f(out int i){....}   int i;f(out i);对于i赋不赋值都无所谓,因为在进入函数时,i会被清空。因此i不能传入值都函数内部,只能从函数内将值带出。它必须在函数内部被赋值,因为它本身没有值,C#不接受一个只有地址没有值得变量,会报错。

ref:仅仅是一个地址

同样在函数的定义和调用时都要显式加ref关键字,使用ref修饰的参数传递前必须初始化,因为它传入后值不会清空,所以必须初始化,因为它本身已经有了值,所以可以在引用它的函数内部不作改变。

8.值类型和引用类型的区别

值类型存储的是数据。分配在栈中,=操作是复制本体一份。

引用类型是一种行为。分配在堆中,=操作是将堆的指针复制一份。

9.结构体与类的区别

结构体是值类型

类是引用类型

10.string和StringBuilder的区别

string对象是不可变的,string i="a";i+="b";此时i为ab,貌似string是可以改变的,其实不然,当进行+=操作时是重新创建了一个string对象,赋值ab,原先的string被丢弃,string不能使用new string()来构造一个string对象。

StringBuilder是可变的,它专门用来处理动态变化字符类。StringBuilder str=new StringBuilder("a");str.Append("b");

相对来说,如果对字符串要进行大量的动态变化,最好用StringBuilder,因为使用string会不停的创建销毁string对象,系统开销很大,使用StringBuilder效率更高。

abstract class与interface的区别还不太理解。

亮剑.NET第二章的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  3. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

  4. Python黑帽编程 2.0 第二章概述

    Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  6. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

  7. 数据结构与算法分析C++表述第二章编程题

    把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...

  8. 【vue.js权威指南】读书笔记(第二章)

    [第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...

  9. Java语言程序设计(基础篇)第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

随机推荐

  1. 5G标准公布,你很快又要换手机了

    通常,在4G网络环境下,下载一部1G的电影只需要30秒时间,对于经历过2G和3G网络的我们来说已经非常快了. 但是听说,5G环境中下载一部同样的电影,根本不是用秒来计算的,甚至有外媒说,5G的速率会是 ...

  2. .netcore持续集成测试篇之web项目验收测试

    系列目录 通过前面的单元测试,我们能够保证项目的基本模块功能逻辑是正常的,通过集成测试能够保证接口的请求是正常的.然而最终项目交付我们还需要对项目进行页面的行为进行测试,比如页面布局是否正常,按钮是否 ...

  3. C++标准库函数 end 的实现原理(非类型模板参数)

    在刚开始学习<C++ Primer>的时候遇到了 end 函数,感觉很神奇,但又很迷惑:为什么能获得数组的尾后指针呢?编译器也不会在内存中申请一块空间放数组元素的个数啊!最近再一次遇到了 ...

  4. JDK1.6 对 synchronized 的锁优化

    1. 背景 在 JDK 1.6 中对锁的实现引入了大量的优化. 目的 减少锁操作的开销. 2. 锁优化 在看下面的内容之间,希望大家对 Mark Word 有个大体的理解.Java 中一个对象在堆中的 ...

  5. 操作微信-itchat库的安装

    基于pyCharm开发环境,在CMD控制台输入:pip install itchat      等待安装...... Microsoft Windows [版本 6.1.7601]版权所有 (c) 2 ...

  6. 利用WxJava实现网站集成微信登录功能,核心代码竟然不超过10行

    最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二.开发指南三.开发实战1.po ...

  7. CentOS -- Zookeeper installation and configure

    1 JDK 1.8 must installed first 2 Get Zookeeper package wget https://archive.apache.org/dist/zookeepe ...

  8. Linux下Nodejs安装(最新版)

    Linux安装最新版Node.js 由于直接yum安装的nodejs版本太低,所以本篇文章向大家介绍在 Linux 上安装 Node.js 最新版的方法. 安装环境 本机系统:CentOS Linux ...

  9. [系列] - go-gin-api 路由中间件 - 日志记录(三)

    目录 概述 gin.Logger() 自定义 Logger() 源码地址 go-gin-api 系列文章 概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 va ...

  10. 2018宁夏邀请赛 Continuous Intervals(单调栈 线段树

    https://vjudge.net/problem/Gym-102222L 题意:给你n个数的序列,让判断有几个区间满足排完序后相邻两数差都不大于1. 题解:对于一个区间 [L,R],记最大值为 m ...