一、一些基本概念
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#图解教程学习笔记——类相关的概念的更多相关文章

  1. C#图解教程学习笔记——类和继承

    一.屏蔽基类的成员所有类都派生自object类.虽然类只能直接继承一个基类,但继承的层次没有限制.虽然派生类不能删除它继承的任何成员,但可以用与基类同名的成员来屏蔽(mask)基类成员.1. 要屏蔽一 ...

  2. C#图解教程学习笔记——方法

    一.字段和本地变量.本地常量字段:隶属于类的变量,即类的成员变量.本地变量:于保存本地的或临时的计算数据,即局部变量.本地常量:必须声明在块内部,声明时必须初始化,声明后不能改变.实例字段与本地变量区 ...

  3. C#图解教程学习笔记——委托

    一.委托概述委托和类一样,是用户自定义类型,也是引用类型.但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作. 可以通过以下操作步骤来使用委托:(1)声明一个委托类型.委托声 ...

  4. C#图解教程学习笔记——数据类型与数据存储

    一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...

  5. C++学习笔记-类相关问题总结

    1.默认构造函数 默认构造函数要么没有参数,要么所有参数都有默认值.如果没有定义任何构造函数,编译器将自定义默认构造函数. 自动生成的默认的构造函数的作用: (1)使可以创建对象 (2)调用基类的默认 ...

  6. C#图解教程学习笔记——转换

    一.什么是转换转换(conversion)是指接受一个类型的值并使用它作为另一个类型的等价值的过程.转换后的值应和源值是一样的,但其类型为目标类型. 二.隐式转换和显式转换(强制转换)1. 隐式转换( ...

  7. C#图解教程学习笔记——接口

    一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...

  8. C#图解教程学习笔记——事件

    一.事件的定义事件:当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知,同时运行相应处理程序.事件的很多部分都与委托类似.实际上,事件就像专门用于特殊用途的简单委托.事件包含了一个 ...

  9. 【C#图解教程学习笔记】第13章 委托

    13.1 什么是委托 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法. 委托是用户自定义的引用类型. 13.2 委托概述 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列 ...

随机推荐

  1. python面试题Python2.x和Python3.x的区别

    所属网站分类: 面试经典 > python 作者:外星人入侵 原文链接: http://www.pythonheidong.com/blog/article/22/ 来源:python黑洞网 w ...

  2. kali下将Python2.x切换至Python3.x

    注:我是将Python2切换到Python3.6版本的,下面文件夹名,请注意变更. 1.首先在/usr/local/下创建一个Python-3.6 注意文件夹名(根建议据自己安装版本命名)mkdir ...

  3. ZOJ Monthly, January 2018 训练部分解题报告

    A是水题,此处略去题解 B - PreSuffix ZOJ - 3995 (fail树+LCA) 给定多个字符串,每次询问查询两个字符串的一个后缀,该后缀必须是所有字符串中某个字符串的前缀,问该后缀最 ...

  4. java枚举类型转换为Struts2的select的数据

    枚举类:AppSortEnum.java public enum AppSortEnum { CORE(0, "核心应用"), ENJOYMENT(1, "娱乐应用&qu ...

  5. Android如何添加多张引导页

    摘要:项目需要添加多张引导页,所以在网上搜集了一些资料并整理好. Step1 添加一个GuideActivity. 其实这个引导页无非就是一个Activity,里面有一个ViewPager而已.多张图 ...

  6. Js中的undefined和not defined

    1.undefined 已经声明,但未赋值 2.not defined 未声明,报错

  7. MySQL时间字段究竟使用INT还是DateTime

    今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` ) unsigned '; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用 ...

  8. win8 远程桌面时提示凭证不工作问题的终极解决办法

    环境说明 远程办公电脑(放置于公司.自用办公电脑.win8系统) 远程连接客户机(放置于家中.家庭日常所用.win8系统) 故障现象 最近在使用远程桌面连接公司的办公电脑时,突然发现win8系统总是无 ...

  9. leetcode 【 Majority Element 】python 实现

    题目: Given an array of size n, find the majority element. The majority element is the element that ap ...

  10. CSU-1985 驱R符

    CSU-1985 驱R符 Description 阴阳师中有三中稀有度的式神R,SR,SSR,其中R的稀有度最低,每次抽符,会随机得到一种式神,然而子浩君对R式神已经深恶痛绝. 某天,子浩君突然发现, ...