C#基础复习

深入理解类

目录

深入理解类

类成员

 成员修饰符的顺序

 实例类成员

 静态字段

 从类的外部访问静态成员

 静态成员的生存期

静态函数成员

 其他静态类成员类型

 成员常量

 常量与静态量

属性

 属性声明和访问器

 属性示例

 使用属性

 属性和关联字段

 只读和只写属性

 自动实现属性

静态属性 

 实例构造函数

静态构造函数

 对象初始化语句

 析构函数

readonly修饰符

 this 关键字

 索引器

 什么是索引器

索引器和属性 

 声明索引器

索引器的 set 访问器 

 索引器的 get 访问器

索引器重载

访问器的访问修饰符

 分部类和分部类型

 分部方法


类成员

C#基础复习_第1张图片

 成员修饰符的顺序

【可选的特性】【可选的修饰符】核心声明

C#基础复习_第2张图片

 

 字段的类型和方法的返回类型不是修饰符,他们是核心声明的一部分

C#基础复习_第3张图片

 实例类成员

类成员可以关联到类的一个实例,也可以关联到类的整体,即所有类的实例。默认情况下,成员被关联到一个实例。可以认为是类的每个实例拥有各自的各个类的成员的副本,这些成员称为实例成员

C#基础复习_第4张图片

 静态字段

静态字段被类的所有实例共享。所有实例都访问同意内存位置。因此,如果该内存位置的值被一个实例改变了,这种改变对所有实例都可见

可以使用static修饰符将字段声明为静态

 从类的外部访问静态成员

静态成员可以使用点运算符从类的外部访问。但是因为没有实例所以必须用类名。

 静态成员的生存期

只有在实例创建之后才产生实例成员,在实例销毁之后实例成员也就不存在

但是即使类没有实例,也存在静态成员,并且可以访问

静态函数成员

 其他静态类成员类型

C#基础复习_第5张图片

 成员常量

被声明在类声明中而不是方法内

与本地常量类似,用于初始化成员常量的值在编译时必须是可计算的,而且通常是一个预定义类型或由他们组成的表达式

与本地常量类似,不能在成员常量声明以后给他赋值

C#基础复习_第6张图片

 常量与静态量

虽然常量成员表现得像一个静态量,但不能将常量声明为static

属性

属性是代表类的实例或类中的一个数据项的成员。使用属性看起来非常像写入或读取一个字段,语法是相同的

与字段类似,属性有如下特征:

                 它是命名的类型成员

C#基础复习_第7张图片

C#基础复习_第8张图片

 属性声明和访问器

C#基础复习_第9张图片

 下图中的访问声明既没有 显式 的参数,也没有返回类型,不需要他们,因为它们已经在属性的类型中隐含了

C#基础复习_第10张图片

 属性示例

C#基础复习_第11张图片

 C#基础复习_第12张图片

 使用属性

 写入和读取属性的方法与访问字段一样,访问器被隐式调用

C#基础复习_第13张图片

 属性和关联字段

 命名约定

C#基础复习_第14张图片

 只读和只写属性

C#基础复习_第15张图片

 自动实现属性

C#基础复习_第16张图片

 可以是可以,但是有什么意义???

除了可方便以外,自动实现属性使你在倾向于声明一个公有字段的地方很容易插入一个属性

静态属性 

静态属性的访问器和静态成员一样,具有以下特点:

 实例构造函数

C#基础复习_第17张图片

 

 如果在类的声明中没有显式的提供实例构造函数,那么编译器会提供一个隐式的默认构造函数,没有参数,方法体为空

静态构造函数

静态构造函数初始化类的静态字段

C#基础复习_第18张图片

 C#基础复习_第19张图片

 对象初始化语句

C#基础复习_第20张图片

 析构函数

readonly修饰符

字段可以用readonly修饰声明,起作用类似于将字段声明为const,一旦值被设定就不能改变

C#基础复习_第21张图片

 C#基础复习_第22张图片

 this 关键字

this 关键字在类中使用,是对当前实例的引用。它只能被用在下列类成员的代码块中

C#基础复习_第23张图片

 索引器

C#基础复习_第24张图片

 什么是索引器

C#基础复习_第25张图片

索引器和属性 

C#基础复习_第26张图片

 C#基础复习_第27张图片

 声明索引器

C#基础复习_第28张图片

索引器的 set 访问器 

C#基础复习_第29张图片

C#基础复习_第30张图片

 索引器的 get 访问器

C#基础复习_第31张图片 

 一个示例:

using System;
using System.Collections.Generic;
using System.Text;

namespace Csharpzuoye
{
  class Employee
  {
        public string LastName;
        public string FirstName;
        public string CityOfBirth;
        
        public string this[int index]
        {
            set
            {
                switch (index)
                {
                    case 0:LastName = value;
                        break;
                    case 1:FirstName = value;
                        break;
                    case 2:CityOfBirth = value;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException("index");
                }
            }
            get
            {
                switch (index)
                {
                    case 0:return LastName;
                    case 1:return FirstName;
                    case 2:return CityOfBirth;
                    default:
                        throw new ArgumentOutOfRangeException("index");
                }
            }
        }
  }
}

索引器重载

只要索引器的参数列表不同,类就可以有任意多个索引器。

访问器的访问修饰符

默认情况下,成员的两个访问器有和成员自身相同的访问级别。

不过也可以为两个访问器分配不同的访问级别

 

 C#基础复习_第32张图片

 分部类和分部类型

C#基础复习_第33张图片

 

 分部方法

分部方法是声明在分布类中不同部分的方法。分部方法的不同部分可以声明在不同的分部类中,也可以声明在同一个类中。分部方法的两个部分如下:

C#基础复习_第34张图片

 C#基础复习_第35张图片

 C#基础复习_第36张图片

 输出  11

你可能感兴趣的:(C#,C#)