优秀的编程知识分享平台

网站首页 > 技术文章 正文

02010501 类的基本概念_0901类别

nanyue 2025-10-19 10:14:12 技术文章 2 ℃

02010501 类的基本概念

1. 什么是类

  • 类 → 是一个能存储数据并执行代码的数据结构,它包含数据成员和函数成员。
    • 数据成员存储与类或类的实例相关的数据,它包含如下内容
      • 字段
      • 常量
    • 函数成员:它执行代码,它包含如下内容
      • 方法
      • 属性
      • 构造函数
      • 析构函数
      • 运算符
      • 索引器
      • 事件

2. 声明类

  • 类的声明定义新类的特征和成员,类的声明并不创建类的实例,但是创建用于生成类实例的模板,类的声明提供如下内容:
    • 类的名称
    • 类的成员
    • 类的特征
class MyClass
{
    成员声明
}

说明:
1. class是关键字。
2. MyClass是类名。
3. {}内包含了类成员的声明,{}内部组成了类的主体。

3. 类成员

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

3.1 字段

  • 字段是隶属于类的变量,它可以是任何类型(预定义类型或用户定义类型)。字段和所有变量一样用来保存数据,字段有如下特征:
    • 可以被写入
    • 可以被读取
  • 声明一个字段的语句
class MyClass{
    int MyInt; // int字段的类型,MyInt是字段的名称。
}
  • C#在类型的外部不能声明全局变量。

3.2 显示和隐式字段初始化

  • 字段初始化语句是字段声明的一部分,由一个等号后面跟着一个求值表达式组成,字段初始化值必须是编译时可确定的。
class MyClass{
    int MyInt = 10; // 字段初始化语句
}
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// 声明多个字段
int MyInt01, MyInt02;
  • 字段如果没有初始化语句,字段的值会被编译器设为默认值,默认值由字段的类型决定。
    • 值类型(11种)默认值都是0
    • bool类型的默认值是false
    • 引用类型的默认值是null

3.3 方法

  • 方法是具有名称的可执行代码块,当方法被调用(call/invoke)时,它执行自己所含的代码,有些方法返回一个值到它们被调用的位置。
  • 声明方法的语法包括如下部分:
    • 返回类型 → 它声明了方法返回值的类型,如果一个方法没有返回值,那么返回类型被指定为void。
    • 名称 → 这个方法的名称。
    • 参数列表 → 它至少由一对空的()组成,如果有参数将被列到()中间。
    • 方法体 → 它由一对{}组成,大括号内包含执行的代码。
class MyClass
{
    void MyFunc01() // 返回类型为void,参数列表为无参。
    {
        执行的代码
    }
}
  • C#中没有全局函数声明在类型外部,C#中方法没有默认的返回类型(所有方法必须包含返回类型或void)。

4. 创建变量和类的实例

  • 类的声明是创建类的实例的模板,一旦类被声明,就可以创建类的实例。
  • 要创建类的实例,需要从声明一个类类型的变量开始,如果这个变量没有初始化,那么它的值是未定义的。

5. 为数据分配内存

5.1 类类型变量用来保存引用

MyClass myClass; // 声明类类型变量myClass

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

5.2 对象创建表达式


  • new运算符为任意指定类型分配并初始化内存,它依据类型的不同从栈或者堆里分配内存。使用new运算符组成一个对象创建表达式,它的组成如下:
    • 关键字new
    • 要分配内存的实例的类型名称
    • 成对的圆括号,可能包括参数也可能没有参数(后面章节会讨论)
  • 对象创建表达式语句
new MyClass(); // 对象创建表达式
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
Myclass myClass; // 声明引用变量
myClass = new MyClass(); // 为类对象分配内存并赋值给变量

说明:
说明:
1. 如果将内存分配给一个引用类型,则对象创建表达式返回一个引用,这个引用存放在类型变量分配的内存里面。
2. 这个引用指向在堆中被分配并初始化的对象实例。
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// 将声明引用变量和对象创建表达式合并的写法
MyClass myClass = new MyClass();

5.3 实例成员

class MyClass
{
    成员变量
    乘以方法
}

class Program
{
    static viod Main()
    {
        MyClass myClass01 = new MyClass(); // 创建类对象,并将类对象引用赋值给变量myClass01
        MyClass myClass02 = new MyClass(); // 创建类对象,并将类对象引用赋值给变量myClass02
        MyClass myClass03 = new MyClass(); // 创建类对象,并将类对象引用赋值给变量myClass03
    }
}

说明:每一个类对象里面都包含有数据成员(成员变量和成员方法),每个对象的数据成员称之为实例成员。

6. 访问修饰符

  • 从类的内部,任何函数成员都可以使用成员的名称访问类中任意的其它成员。
  • 访问修饰符是成员声明的可选部分,指明程序的其它部分如何访问成员。
// 字段的访问修饰符语句
访问修饰符 类型 标识符;

// 方法的访问修饰符语句
访问修饰符 返回类型 方法名()
{
    ...
}
  • 成员访问控制的5种修饰符
    • private → 私有的
    • public → 公共的
    • protected → 受保护的
    • internal → 内部的(后续章节讲解)
    • protected internal → 受保护内部的(后续章节讲解)

7. 私有访问和公有访问

  • 私有成员只能从声明它的类的访问,其它的类看不见或无法访问它们。
    • 私有访问是默认的访问级别,如果一个成员在声明时不写访问修饰符,那它默认就是私有的。
    • 还可以使用private访问修饰符显示的将一个成员声明为私有。
    • 显式的声明私有和隐式的声明私有在语法上没有不同,两种形式是等价的。
  • 实例的公有成员可以被程序的其它对象访问,必须使用public访问修饰符指定公有访问。
class MyClass
{
    int MyInt; // 默认为私有字段,直接可以在内的内部使用。
    private string MyStr; // 显式的声明为私有字段,直接可以在内的内部使用。
    public double MyDouble; // 声明为公有字段,可以通过创建类的实例,在类的外部使用。
    
    void MyFunc01() // 默认为私有方法,直接可以在类的内部使用。同时该方法可以访问类中所有字段
    {
        ...
    }
    
    private void MyFunc01() // 显式的声明为私有方法,直接可以在类的内部使用。同时该方法可以访问类中所有字段
    {
        ...
    }
    
    public void MyFunc03() // 声明为公有方法,可以通过类的实例在类的外部使用该方法。
    {
        ...
    }
}
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// 从类的外部访问实例成员
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo01
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = new MyClass();
            myClass.MyFunc();
            Console.WriteLine(myClass.MyStr);

            Console.ReadLine();
        }
    }

    class MyClass
    {
        int MyInt = 10;
		public string MyStr = "Qinway";
            
        public void MyFunc()
        {
            Console.WriteLine(MyInt);
        }
    }
}

控制台输出
10
Qinway

疑问:在类的外部通过类对象myClass访问类的公有方法MyFunc,但是这个公有方法使用了类内部私有的成员MyInt,并没有报错?

说明:要从类的外部访问实例成员,必须包含变量名称和成员名称,中间用“.”进行 分隔,这个"."称为点运算符。

结尾

书籍:C#图解教程

著:【美】丹尼尔 · 索利斯;卡尔 · 施罗坦博尔

译:窦衍森;姚琪琳

ISBN:978-7-115-51918-4

版次:第5版

发行:人民邮电出版社

※敬请购买正版书籍,侵删请联系85863947@qq.com※

※本文章为看书或查阅资料而总结的笔记,仅供参考,如有错误请留言指正,谢谢!※

最近发表
标签列表