C#图解教程学习笔记——类相关的概念
一、一些基本概念
1. 字段:隶属于类的变量,即类的成员变量。
2. 方法:隶属于类的函数,即类的成员函数。
3. 实例成员:类的每个实例拥有自己的各个类成员的副本,这些成员称为实例成员。 改变一个实例字段的值不会影响任何其他实例成员中的值。
4. 静态成员
静态成员是与类相关的成员,被加载到静态存储区,且只被创建一次,类的所有实例共享静态成员。
静态字段示例:

静态函数成员:无需类实例就可以调用静态方法。静态函数成员不能访问实例成员,只能访问静态成员。
从类的外部访问静态成员:类名称.静态成员名称
注:
静态成员即使没有类的实例也存在。如果静态字段有初始化语句,那么会在使用该类的任何静态成员之前初始化该字段,但没必要在程序执行的开始就初始化。
5. 成员常量:声明在类声明中的常量。
常量不能声明为静态成员。
成员常量表现得像静态值,对类的每个实例都是可见的,即使没有类的实例也可以访问。但是常量没有自己的存储位置,而是在编译时被编译器替换,而静态量是有自己的存储位置的。
6. readonly修饰符:字段可用readonly修饰。其作用类似于将字段声明为const,一旦值被设定就不能改变。
readonly字段与const字段有何区别?
(1)const字段只能在字段声明语句中初始化,而readonly字段除了可以在字段声明语句中初始化,还可以在类的任何构造函数中初始化,如果是static字段,初始化必须在静态构造函数中完成。
(2)const字段的值必须在编译时决定,而readonly字段值可以在运行时决定。
(3)const字段的行为总是静态的,在内存中没有存储位置。而readonly字段可以是静态字段,也可以是实例字段,而且在内存中是有存储位置的。
二、属性
属性代表类的实例或类中的一个数据项成员。使用属性看起来像写入或读取一个字段,它们语法相同。
1. 关于属性的一些特性
(1)属性是有类型的、命名的类成员,可以被赋值和读取。
(2)属性是执行代码,不为数据存储分配内存。
(3)可被声明为static。
(4)属性拥有两个称为访问器的方法:
<1>set访问器:为属性赋值。拥有一个单独的、隐式的值参,名称为value,与属性的类型相同,返回类型为void。
<2>get访问器:从属性取值。没有参数,返回类型与属性类型相同。
访问器set、get顺序任意,除这两个访问器外在属性上不允许有其他方法。
访问器set、get可以只定义其中一个,但至少要定义一个。
示例:

2. 属性的使用
属性根据当前执行的操作是写入还是读取,隐式调用访问器。(访问器不能被显式调用)
示例:

3. 属性的作用
(1)将字段声明为private以封装字段,并声明一个public属性来控制从类的外部对该字段的访问。这样的字段常被称为后备字段、后备存储。
(2)可以声明属性为只读或只写,从而控制后备字段为只读或只写。只有get访问器的属性为只读属性,只有set访问器的属性为只写属性。
(3)属性访问器可以对字段执行其他计算。
4. 自动实现属性
因为属性经常关联到后备字段,C#提供了自动实现属性(automatically implemented property),允许只声明属性而不声明后备字段。编译器为你创建隐藏的后备字段,并且字段挂接到get和set访问器上。
自动实现属性的要点如下:
(1)不声明后备字段,编译器根据属性类型分配存储。
(2)不能提供访问器的方法体,它们必须被简单地声明为分号。get相当于简单的内存读,set相当于简单的写。
(3)除非通过访问器,否则不能访问后备字段。因为不能用其他方法访问,所以实现只读和只写属性没有意义,因此使用自动属性必须同时提供读写访问器。
三、构造函数
1. 构造函数的名称与类相同。
2. 构造函数不能有返回值。
3. 如果在类的声明中没有显式的提供实例构造函数,那么编译器会提供一个隐式的默认构造函数,默认构造函数没有参数,且方法体为空。
4. 只要声明了构造函数,编译器就不再提供默认构造函数。
5. 构造函数可以被重载。
6. 实例构造函数初始化类的每个新实例,静态构造函数初始化类级别的项。通常,静态构造函数初始化类的静态字段。
7. 静态构造函数不能在程序中显式调用,系统会自动调用它们,调用时机:类的任何实例被创建前;类的任何静态成员被引用前。
四、索引器
索引器是一组get和set访问器,与属性类似。可以认为,索引器是为类的多个数据成员提供了get、set属性。
声明示例:

调用示例:
var emp = new Employee();
emp[0] = "Jet";
emp[1] = "Wu";
var lastname = emp[0];
1. 和属性一样,索引器不用分配内存来存储。
2. 和属性一样,索引器可以只有一个访问器,也可以两个都有。
3. 索引器总是实例成员,因此不能声明为static。
4. 和属性一样,实现get、set访问器的代码不必一定关联到某字段或属性。这段代码可以什么都不做,只要get访问器返回某个指定类型值即可
5. 索引器声明中,参数列表至少要声明一个参数。
6. 和属性一样,不能显示调用get、set访问器。取而代之,当索引器用在表达式中取值时,将自动调用get访问器。索引器被赋值时,自动调用set访问器。
7. 索引器重载:一个类可以有任意多个参数列表不同的索引器。
8. 索引器的访问修改符:
(1)仅当成员(属性或索引器)既有get访问器也有set访问器时,其访问器才能有访问修饰符。
(2)虽然两个访问器都必须出现,但它们中只能有一个有访问修饰符。
(3)访问器的访问修饰符必须比成员的访问级别有更严格的限制性,即访问器的访问级别必须比成员的访问级别低。
五、分部类和分部方法
1. 分部类
类的声明可以分割成几个分部类的声明。
每个分部类的声明都含有一些类成员的声明。
类的分部类声明可以在同一文件中也可以在不同文件中
每个局部声明必须标为partial class,而不是class。
分部类声明看起来和普通类声明相同。
示例:

2. 分部方法
分部方法是声明在分部类中不同部分的方法。
分部方法分为两个部分:定义分部方法声明和实现分部方法声明。
1. 定义声明和实现声明的签名和返回类型必须匹配。签名和返回类型有如下特征:
<1>返回类型必须是void。
<2>签名不能包括访问修饰符,这使分部方法是隐式私有的。
<3>参数列表不能包含out参数。
<4>在定义声明和实现声明中都必须包含上下文关键字partial,直接放在关键字void前。
2. 可以有定义部分而没有实现部分。这种情况下,编译器把方法的声明以及方法内部任何对方法的调用都移除。不能只有实现部分而没有定义部分。
示例:

C#图解教程学习笔记——类相关的概念的更多相关文章
- C#图解教程学习笔记——类和继承
一.屏蔽基类的成员所有类都派生自object类.虽然类只能直接继承一个基类,但继承的层次没有限制.虽然派生类不能删除它继承的任何成员,但可以用与基类同名的成员来屏蔽(mask)基类成员.1. 要屏蔽一 ...
- C#图解教程学习笔记——方法
一.字段和本地变量.本地常量字段:隶属于类的变量,即类的成员变量.本地变量:于保存本地的或临时的计算数据,即局部变量.本地常量:必须声明在块内部,声明时必须初始化,声明后不能改变.实例字段与本地变量区 ...
- C#图解教程学习笔记——委托
一.委托概述委托和类一样,是用户自定义类型,也是引用类型.但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作. 可以通过以下操作步骤来使用委托:(1)声明一个委托类型.委托声 ...
- C#图解教程学习笔记——数据类型与数据存储
一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...
- C++学习笔记-类相关问题总结
1.默认构造函数 默认构造函数要么没有参数,要么所有参数都有默认值.如果没有定义任何构造函数,编译器将自定义默认构造函数. 自动生成的默认的构造函数的作用: (1)使可以创建对象 (2)调用基类的默认 ...
- C#图解教程学习笔记——转换
一.什么是转换转换(conversion)是指接受一个类型的值并使用它作为另一个类型的等价值的过程.转换后的值应和源值是一样的,但其类型为目标类型. 二.隐式转换和显式转换(强制转换)1. 隐式转换( ...
- C#图解教程学习笔记——接口
一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...
- C#图解教程学习笔记——事件
一.事件的定义事件:当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知,同时运行相应处理程序.事件的很多部分都与委托类似.实际上,事件就像专门用于特殊用途的简单委托.事件包含了一个 ...
- 【C#图解教程学习笔记】第13章 委托
13.1 什么是委托 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法. 委托是用户自定义的引用类型. 13.2 委托概述 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列 ...
随机推荐
- 如何禁止js缓存?
<html> <head> <script type="text/javascript"> document.write("<s ...
- php中处理字符串的常见函数
编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个函数可以为您提供方便. 1. strstr strstr() ...
- 02.VUE学习二之数据绑定
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 删除项目开发中的.pyc文件
在实际开发中python会自动生成很多pyc文件,但是这些pyc文件是不需要我们追踪的,删除了对项目也没有影响,下面是删除pyc文件的方法. Linux或Mac系统 find /tmp -name & ...
- Olympic Class Ships【奥林匹克级邮轮】
Olympic Class Ships You probably know about the Titanic, but it was actually just noe of three state ...
- vscode添加Astyle
1.安装astyle插件,在应用商城里面一键安装即可.2.下载astyle的bin文件,并添加到系统环境变量.3.打开vscode的settings.json,添加以下代码. { "edit ...
- [BZOJ1208]宠物收养所(Splay)
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- Spring加载配置文件的几种方法(org.springframework.beans.factory.BeanDefinitionStoreException)
一:Spring中的几种容器都支持使用xml装配bean,包括:XmlBeanFactory ,ClassPathXmlApplicationContext ,FileSystemXmlApplica ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- python - 接口自动化测试 - TestLogin - 登录接口测试用例
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: test_login.py @ide: PyCharm C ...