第9章 定义类----学习笔记

一.C#中类的定义

1.类的定义方法:

<accessType> class<className>:<baseClass>,<interface>

{

//class member;

}

注:

1).默认情况下类的访问权限是内部的(internal),只有当前项目中才能访问它

2).类还还有抽象类(abstract修饰,不能实例化、只能继承、可以有抽象成员)和与之对立的密封类(sealed修饰,不能继承),这两种类都有public和internal类型的

3).一个类只能有一个基类

4).如果继承了一个抽象类,必须实现所继承的所有抽象成员(除非其基类也是抽象类)

5).子类的可访问性不能高于父类,如子类是public,基类不能是internal的

6).支持接口的类必须实现所有的接口成员,但如果不想使用给定的接口,则可以提供一个“空”的实现方式(没有函数代码)

7).定义接口方式与定义类类似,用关键字interface

8).定义接口不能用abstract和sealed修饰

2.System.Object

因为所有的类都继承了System.Object,所有所有的类都能够访问Sytem.Object的Protect和Public成员。也可以重写其方法

3.构造函数和析构函数

C#定义类时,常常不需要定义构造函数和析构函数,编译器会自动添加,但有可在必要的时候添加。

1).构造函数定义方法:

<accessType> <className>(paramater1,…)

{

//Constructor code;

}

1>.构造函数与类同名

2>.默认构造函数没有参数,且访问控制权限为public

3>.构造函数是用来创建类的实例的,但也可以有Internal的构造函数,这个构造函数不能创造类的实例

4>.构造函数可以有多个,参数集不能重复

2).析构函数的定义

~ <className>()

{

//Destructor body;

}

3).构造函数的执行序列

1>.实例化继承子类,必须先实例化其基类,要实例化其基类就得先实例化其基类的基类,直到实例化Sytem.Object为止

2>.除非明确指示,否则使用期默认构造函数。上述一连串不论子类用的是否默认构造函数,基类一定用其默认构造杉树

3>.实例化子类是如果要使用基类的非默认构造函数,可用base(<paramater>)关键字指定使用固定参数的构造函数

5.类库项目

如果一个项目只包含类(以及其他相关类的定义,但没有入口点),该项目就称为类库。类库项目被编译为.dll文件

将类库项目加入参考,并用using语句写入主程序即可被引用。..

6.接口和抽象类

1).二者的相同之处

1>.都包含可以由派生类继承的成员

2>.都不能直接实例化,但可以声明这些类型的变量。然后把继承这两种类型的对象指定给他们的变量,同过变量来使用其成员

2).二者的不同之处

1>.类只能直接继承于一个抽象类(可用继承链继承多个类),但类可以有多个接口

2>.抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,除非派生类本省也是抽象的)和非抽象成员;接口成员必须被使用它的类实现

3>.接口成员的定义倾向于公共的,但抽象类的成员可以是私有的、受保护的、内部的

4>.接口不能包含字段、构造函数、析构函数、静态成员或常量

7.结构和类

结构:值类型,把结构A赋值给结构B,是指把结构A中的内容全部复制到结构B中

类:
引用类型,把类A的对象赋值给类B的对象,是指把类A的对象在内存中的地址复制给类B的对象

时间: 2024-08-29 22:45:32

第9章 定义类----学习笔记的相关文章

《机器学习导论》第三章 贝叶斯决策定理 学习笔记

在机器学习领域,我们碰到的第一个问题就是:如何选择特征量. 可是看了一些资料,这点好像都是一笔带过,因为很多都是所谓的不可观测量,如何把不可观测量量化呢?这个或许能给机器学习带来新的契机,就像当年牛顿把力.质量.加速度等模糊的概念定义下来,经典物理出现了前所未有的发展,香农把信息量化,造就了信息革命. 以前觉得贝叶斯好像没有大家说的那么神奇,现在知道,是因为当年对它的理解就有问题,贝叶斯更重要的一点应该是能够在加入evidence的情况下,从先验概率进化到后验概率,这点简直就是机器学习的内涵啊

Arrays类学习笔记

Arrays.asList(arr); 该方法可以把数组变成List集合. String[] arr = {"abc","cc"}; List<String> list = Arrays.asList(arr); /* 如果数组中的元素都是对象,那么变成集合的时候,数组中的元素就直接转换成集合中的元素. 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在. */ Arrays.toArray(new String[]); 1. 指定类型

Apache commons lang工具类学习笔记(2)--StringUtils

StringUtils工具类具有对String具有简单而强大的处理能力,从检查空串到分割字符串,到生成格式化的字符串,使用都很方便简洁,能减少很多代码量; 详细的使用方法可以参考下面的例子或者官方的API(http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isAlpha(java.lang.CharSequence)) packa

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

Collection类学习笔记

binarySearch原理: public static index halfSearch(List<String> list, String key) { int max,min,mid; max = list.size()-1; min = 0; while(min<=max) { mid = (max+min) >>1; String str = list.get(mid); int num = str.compareTo(key); if(num > 0) m

《C++ Primer Plus》10.2 抽象和类 学习笔记

10.2.1 类型是什么基本类型完成了下面的三项工作:* 决定数据对象需要的内存数量:* 决定如何解释内存中的位(long和float在内存中占用的位数相同,但是将它们转换为数值的方法不同):* 决定可以使用数据对象执行的操作或方法.在于内置类型来说,有关操作的信息被内置到编译器中.但在C++中定义用户自定义的类型时,必须自己提供这些信息.付出这些老动换来了根据实际需要定制新数据类型的强大功能和灵活性.10.2.2 C++中的类一般来说,类规范由两部分组成:* 类声明:以数据成员的方式描述数据部

python 定义类 学习1

此时的d1就是类Dog的实例化对象 实例化,其实就是以Dog类为模版,在内存里开辟一块空间,存上数据,赋值成一个变量名 # 定义类模板 class dog(object): # 定义类的方法功能 # 说话功能 self 必须有 def sayhi(self): print("helo") # 通过类 实例化对象 d1 = dog("小涛") print(d1) # <__main__.dog object at 0x0000000001ECD208> #

《C++ Primer Plus》第10章 对象和类 学习笔记

面向对象编程强调的是程序如何表示数据.使用 OOP 方法解决编程问题的第一步是根据它与程序之间的接口来描述数据,从而指定如何使用数据.然后,设计一个类来实现该接口.一般来说,私有数据成员存储信息,公有成员函数(又称为方法)提供访问数据的唯一途径.类将数据和方法组合成一个单元,其私有性实现数据隐藏.通常,将类声明分成两部分组成,这两部分通常保存在不同的文件中.类声明(包括由函数原型表示的方法)应放到头文件中.定义成员函数的源代码放在方法文件中.这样便将接口描述与实现细节分开了.从理论上说,只需知道

统计学习方法(第2章)感知机 学习笔记

第2章 感知机 感知机是二类分类的线性分类模型,其输入为实例的特征向量,感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型.导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型.感知机学习算法分为原始形式和对偶形式,是神经网络和支持向量机的基础. 1.感知机模型 感知机定义: 假设输入空间(特征空间)是X,输出空间是Y,Y的取值为+1和-1,输入x表示实例的特征向量,对应于输入空间(特征空间)的:输入y表示实例的类别.由输入空间到输出空间的如