C#面向对象名词比较(转ttyp 的文章)

比较|对象

重写(override)与重载(overload)

相似:他们都是重新定义一个方法的实现过程

区别:
重写(override):是指对象之间的某个方法的重新实现,在一个类继承一个类时,当基类中某方法申明为virtual或abstract时,在派生类中使用override关键字重新申明一个方法,注意该方法必须与基类中的参数返回值一样,一个类中对于基类某方法只能重写一次,调用基类还是派生类的实现是通过所定义的对象的类型来决定,和方法的参数无关

重载(overload):指对象中某个方法的重新实现,方法重载不需要关键字,只需要申明方法的参数类型或个数不一样即可,重载不能根据返回类型不同来重载,重载可以重载任意多次,没有限制.调用哪个重载方法只和调用时的参数有关系

(抽象)abstract和虚拟(virtual)
相似:在申明方法的时候,都能被重写

区别:

(抽象)abstract:可以申明类也可以申明方法,申明方法时不能和sealed一起申明,所申明的类必须被继承,申明的方法也必须被重写,申明时没有具体实现,实际上它起一个接口的作用

虚拟(virtual):只能申明方法,可以在申明方法的时候写对应的实现

类(class)和结构(struct)
相似:都是对象,就单个对象来说,类能实现的几乎结构都能实现

区别:
类:能被继承重写,可以有修饰申明(abstract,sealed),类实例化时使用的是栈中的内存(相对堆慢一点),类在赋值时,只是引用赋值(赋值后,改变被赋值对象的属性,其他跟着改)

结构:不能继承重写,不能有修饰,实例化使用的是堆中的内存(和普通变量一样),是值赋值

常数(const )和只读(readonly)

相似:相对于变量,其值基本不变
区别:
常数(const ):其值为硬编码,其值只能在申明时赋值,在类中使用const申明时,const好像隐式静态变量,每个实例不需要保存副本
只读(readonly):其值可以赋值,但只能在构造函数中赋值或申明时指定,申明为readonly的变量,每个类实例中可以有不同的副本

以上在《C#高级编程》中有介绍,下载见http://bbs.wrclub.net/down/Cshappdf.rar

时间: 2024-08-31 10:27:50

C#面向对象名词比较(转ttyp 的文章)的相关文章

面向对象数据库db4o之旅,第4部分 使用dRS

前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 部分:初识 db4o 中, 作者介绍了 db4o 的历史和现状.应用领域.以及和 ORM 等的比较:在第 2 部 分:db4o 查询方式 中 , 作者介绍了 db4o 的三种不同的查询方式:QBE.SODA 以及 Native Queries,并分别通过这三种不同的途径实现了两个关联对象的查 询:在第 3 部分:深入 db4o 中,作者介绍了 db4o 的修改和删除,引入了" 更新深度 (update depth)"这一重要

开源面向对象数据库db4o之旅,第3部分 深入db4o

前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 部分:初识 db4o 中, 作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较: 在第 2 部分:db4o 查询方式中, 作者介绍了 db4o 的三种不同的查询方式:QBE.SODA 以及 Native Queries,并分别通过这三种不同的途径实现了两个关联对象的查 询. 前面我们已经介绍了如何在 db4o 中查询以及添加对象,在本文中我们将会 向您介绍在 db4o 中如何对对象进行更新以及删除操作. 更新数据

面向对象的Javascript之三(封装和信息隐藏)_js面向对象

同时,我们知道在面向对象的高级语言中,创建包含私有成员的对象是最基本的特性之一,提供属性和方法对私有成员进行访问来隐藏内部的细节.虽然JS也是面向对象的,但没有内部机制可以直接表明一个成员是公有还是私有的.还是那句话,依靠JS的语言灵活性,我们可以创建公共.私有和特权成员,信息隐藏是我们要实现的目标,而封装是我们实现这个目标的方法.我们还是从一个示例来说明:创建一个类来存储图书数据,并实现可以在网页中显示这些数据. 1. 最简单的是完全暴露对象.使用构造函数创建一个类,其中所有的属性和方法在外部

动态创建DataGrid的模版列

datagrid|创建|动态 有的时候我们需要邦定很复杂的DataGrid,我们知道DataGrid,DataList等控件都有Template列,我们可以通过动态的邦定模版列来实现,复杂逻辑的邦定.由于Page继承TemplateControl,所以在Page对象里面就可以使用TemplateControl类里面的方法LoadTemplate,我们可以利用这个方法加载指定路径用户控件来实现丰富的表示(顺便提一下还有一个LoadControl的方法和LoadTemplate有相同的参数类型,也就

Function的扩展(1):继承

作为技术类的开篇文章,很是纠结了一番到底写什么的.想了想,就写面向对象吧..始终对于我们程序员来说,面向对象是写一篇好文章.对不起习惯了.应该说是写一篇好代码的开始. 而面向对象的三大特征中最重要的就是继承了. 继承现在有很多种写法,google一下到处都是.我就不再在这里重复了.直接上我的代码吧. 核心功能代码如下: Function.prototype.Implement = function (parentType) { //判断父类是否存在以及是否为可继承类型 if (parentTyp

柯里化的前生今世(五):动态作用域

关于 在上一篇中,我们介绍了编译器和解释器,抽象语法树与S表达式的关系,并且我们还打算写一个极简的元循环解释器.通过写这个解释器,一方面我们可以熟悉Racket语言,另一方面,可以帮助我们从实现角度来理解某些高级概念. 概览 (废话少说言归正传,一言不合就贴代码.. 这段代码我们用Racket实现了一个具有动态作用域Lisp方言的解释器. 我们没有使用Racket的模式匹配match,而是遵循一般教学用的常规写法, 把S表达式分为3种:符号,自求值表达式,列表(函数定义,函数调用). 如果是符号

测试集 , 训练集和验证集的区别

最近在看机器学习的东西发现验证集的(Validation set) 有时候被提起到,以时间没明白验证集的真正用途. 首先,这三个名词在机器学习领域的文章中是很常见的,以下是这三个词的定义. Training set: A set of examples used for learning, which is to fit the parameters [i.e., weights] of the classifier. Validation set: A set of examples used

训练集(train set) 验证集(validation set) 测试集(test set)

在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train set) 验证集(validation set) 测试集(test set). http://blog.sina.com.cn/s/blog_4d2f6cf201000cjx.html 一般需要将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set).其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选

让外链增加的增加真实和自然,才是符合搜索引擎的发展

摘要: 上周有几个朋友在问我,友链怎么交换更有效,我给出了几个原则,1,相关性高,2,权重相当,3,快照新且网站正常收录,但是在周一的培训的时候,还有朋友问,友链这么难选择, 上周有几个朋友在问我,友链怎么交换更有效,我给出了几个原则,1,相关性高,2,权重相当,3,快照新且网站正常收录,但是在周一的培训的时候,还有朋友问,友链这么难选择,我去发外链,那么外链应该怎么发,才更好,是不是也像友链那么难,如果那样,我们是不是不要发外链了? 我的回答,外链发还是要发的,但是一定要搞清楚发外链的目的,是