C# 学习之路(类的基本概念)

时间:2022-12-15 08:02:02

C# 学习之路(类的基本概念)


  • 类的概述

类是一种活动的数据结构

程序的数据和功能被组织为逻辑上相关的数据项和函数封装的集合,并称为类

类包含数据成员和函数成员:

数据成员:存储与类或类的实例相关的数据(类体内的变量,字段

函数成员:执行代码,通常会模拟类所表示的现实世界事物的功能和操作(类体内的函数,方法

一个 C# 类可以有任意的数目的数据成员和成员函数。成员可以是 9 种成员类型的任意组合

C# 学习之路(类的基本概念)

  • 声明类

类的声明定义新类的特征和成员。它并不创建类的实例,但创建用于创建实例的模板。类的声明提供下列内容:

  • 类的名称
  • 类的成员
  • 类的特征
关键字  类名
class MyExcellentClass
{
    成员声明
}
  • 类成员

字段和方法是最重要的的类成员类型。字段是数据成员,方法是函数成员。

  • 字段

字段是隶属于类的变量

可以是任何类型,无论是预定义类型还是用户定义类型

和所有变量一样,字段是用来保存数据的(可以被写入和读取)

class  MyClass
{
 类型  字段名
 int MyField; 
}

C# 在类型的外部不能声明全局变量,所有的变量都必须在类型声明内部声明

  • 显示和隐式字段初始化

因为字段属于变量,所以字段的初始化和变量的初始化相同。

字段初始化是字段声明的一部分

初始化值必须是编译时可确定的

如果没有初始化语句,字段的值会被编译器设为默认值,默认值由字段的类型决定。(每种值类型的默认值为 0,但 bool 的默认值为 false,引用类型的默认值为 null)

class MyClass
{
 int i1, i2 = 3;
 double d1;
 string s1;
}

Console.WriteLine($"i1 = {i1}, i2 = {i2}, d1 = {d1}, s1 = {s1}");

//输出 (s1 为 null 所以没有输出)
i1 = 0, i2 = 3, d1 = 0, s1 =
  • 声明多个字段

可以通过用逗号分隔名称的方式,在同一条语句种声明多个相同类型的字段。

int F1 = 1, F3;
string F2 = "abc";
  • 方法

方法是具有名称的可执行代码块,可以从程序的很多不同地方执行,甚至从其他程序中执行。

当方法被调用时,它执行自己所含的代码,然后返回到调用它的代码并继续执行调用代码。(和C++的函数类似)

声明方法包括以下组成部分:

返回类型:声明方法返回值的类型(int、double、void…)

名称:方法名

参数列表:由一对空的圆括号组成,如果有参数,将被列在圆括号里

方法体:由一对大括号组成,大括号内包含执行代码

class SimpleClass
{
 返回值 参数列表
 void PrintNums(){
     Console.WriteLine("1");
 }
}

C# 没有全局函数

  • 创建变量和类的实例

类的声明只是用于创建类的实例的蓝图,一旦类被声明,就可以创建类的实例。

类是引用类型,所以需要为数据引用和实际数据都申请内存

数据的引用保存在一个类类型的变量中,要创建类的实例,需要从声明一个类类型的变量开始

class Dealer
{
    ......
}

class Program
{
    static void Main()
    {
        Dealer theDealer; //声明Dealer类型的变量theDealer,因为没有初始化,所以值是未定义
    }
}

C# 学习之路(类的基本概念)

  • 为数据分配内存

声明类类型的变量所分配的内存是用来保存引用的,而不是用来保存类对象实际数据的。要为实际数据分配内存,需要使用 new 运算符。

  1. new 运算符为任意指定类型的实例分配并初始化内存

  2. 使用 new 运算组成一个对象创建表达式,如下所示:

    2.1 关键字 new

    2.2 要分配内存实例的类型名称

    2.3 成对的圆括号

    关键字 类型名 圆括号
    new TypeName()
    
  3. 如果将内存分配给一个引用类型,则对象创建表达式返回一个引用,指向堆中被分配并初始化的对象实例

class Dealer
{
    ......
}

class Program
{
    static void Main()
    {
        Dealer theDealer = new Dealer(); 
    }
}

C# 学习之路(类的基本概念)

  • 实例成员

类声明相当于蓝图,通过这个蓝图想创建多少个类的实例都是可以的。

  • 实例成员:类的每个实例都是不同的实体,有着自己的一组数据,不同于同类的其它实例
  • 静态成员:实例成员是默认类型,但也可声明与类而不是实例相关的成员
  • 访问修饰符

类的内部,任何函数成员都可以使用名称访问类中的任意其它成员

访问修饰符是成员声明的可选部分,指明程序的其它部分任何访问成员。下面是字段和方法声明的语法:

字段:访问修饰符 类型 标识符;

public int k = 0;

方法:访问修饰符 返回类型 方法名(){…}

static void Program
{
    .......
}

5 种成员访问控制

私有的(private) 共有的(public) 受保护的(protected) 内部的(internal) 受保护内部的(protected internal)
  • 私有成员和共有成员

私有成员只能从声明它的类的内部访问,其它的类看不见或无法访问他们。

  1. 私有访问是默认的访问级别,如果一个成员在声明是不带访问修饰符,那就是私有成员
  2. 可以使用 private 访问修饰符显示地将一个成员声明为私有,隐式声明(不带访问修饰符)和显式声明(用 private)私有成员两种形式是等价的
int MyInt1; // 隐式声明私有
private int MyInt2; // 显示声明私有

实例的公有成员可以被访问。共有成员必须使用 public 访问修饰符指定。

public int Myint;
  • 公有访问和私有访问图示
  1. 类成员为类框中的小标签框
  2. 私有成员完全封闭在他们的类框中
  3. 公有成员有一部分伸出它们的类框之外
class Program
{
    int Member1;
    private Member2;
    public Menber3;
}

C# 学习之路(类的基本概念)

  • 成员访问实例
class C1
{
    int F1;		//隐式私有字段
    private int F2; 	//显示私有字段
    public int F3;		//公有字段
    void DoCalc()		//隐式私有方法
    {
        ......
    }
    public int GetVal() //公有方法
    {
        ......
    }
}

C# 学习之路(类的基本概念)

  • 从类的内部访问成员

    class MyClass
    {
        // 字段
        int I1 = 17, I2 = 1;;
        float F1 = 10;
        public string k = "abc";
        
        // 方法
        int Addval()
        {
            I1 += I2; // 访问私有字段
            return I1;
        }

        public void Getval()
        {
            Console.WriteLine("{0}", Addval()); // 访问私有方法
        }

        public float Avx()
        {
            Console.WriteLine($"{k}");
            return F1 * I1;
        }
    }
  • 从类的外部访问成员

要从类的外部访问实例成员,必须包括变量名称和成员名称,中间用点(.)分隔。这称为点运算符

MyClass myClass = new MyClass();
float fValue = myClass.Avx();