实例C#代码解释类的定义和使用

结合上两篇文档,依据类的字段、属性、构造器 以及方法等核心概念,演示创建定义C#类 以及如何使用示例。

1. 类定义示例:Book

定义一个表示"书"的类,涵盖自动属性、只读字段、构造器和表达式体方法。

csharp 复制代码
using System;

namespace LibrarySystem
{
    // 定义一个图书类(引用类型)
    public class Book
    {
        // 1. 字段 (Field)
        // readonly 确保 ID 在构造后不可变更
        private readonly string _id;

        // 2. 属性 (Property)
        // 使用自动属性和 init-only setter(C# 9),初始化后不可修改
        public string Title { get; init; }
        public string Author { get; set; }
        public decimal Price { get; set; }

        // 3. 构造器 (Constructor)
        // 执行类初始化代码,名称与类型相同
        public Book(string id, string title, string author)
        {
            _id = id;
            Title = title;
            Author = author;
        }

        // 4. 方法 (Method)
        // 使用表达式体方法简写形式
        public void DisplayInfo() => 
            Console.WriteLine($"ID: {_id}, 书名: {Title}, 作者: {Author}, 价格: {Price:C}");

        // 5. 解构器 (Deconstructor)
        // 将对象属性反向赋值给变量
        public void Deconstruct(out string title, out string author)
        {
            title = Title;
            author = Author;
        }
    }
}

2. 类的实例化与使用

Main 方法中,展示如何创建对象、使用初始化器以及调用成员。

csharp 复制代码
using System;
using LibrarySystem;

class Program
{
    static void Main()
    {
        // 1. 实例化与对象初始化器
        // 使用构造器设置核心字段,再通过初始化器设置 Price
        Book myBook = new Book("B001", "C#入门经典", "张三") 
        { 
            Price = 59.8m 
        };

        // 2. 调用方法
        myBook.DisplayInfo();

        // 3. 使用解构器 (Deconstruction)
        var (title, author) = myBook;
        Console.WriteLine($"解析结果 - 书名: {title}, 作者: {author}");

        // 4. 验证 readonly 与 init 特性
        // myBook.Title = "新书名"; // 错误:init 属性在初始化后不可修改
    }
}

3. 关键技术点解释

  • 内存分配Book 是一个类(引用类型),myBook 变量存储在栈上,而实际的对象数据存储在堆中。
  • 字段 vs 属性_id 作为私有字段隐藏了内部实现;TitlePrice 作为属性提供了更灵活的访问控制。
  • 初始化顺序 :当你调用 new Book(...) 时,会先按顺序初始化字段,然后执行构造器方法体,最后处理对象初始化器中的赋值。
  • 安全保护 :通过 readonlyinit 关键字,我们构建了一个半不可变的对象,增强了代码的健壮性。
相关推荐
vortex516 小时前
现代 Linux 包管理全景:从 apt 到 Nix,四大派系与四大范式
linux·运维·服务器
曦夜日长16 小时前
Linux系统篇,开发工具(四):make及makefile的使用、makefile的使用细节
linux·运维·服务器
沪漂阿龙16 小时前
面试题详解:大模型设计沙箱全攻略——LLM Sandbox、Agent 工具执行、代码沙箱、安全隔离、权限控制与工程落地
网络·数据库·人工智能·安全
爱炸薯条的小朋友16 小时前
全局锁的性能优势,以及链路优化为何常常低于预期——基于 `MatPoolsTest` 中小图池与大图池的实战复盘
opencv·算法·c#
IT策士16 小时前
Django 从 0 到 1 打造完整电商平台:Admin 后台管理与数据初始化
数据库·django·sqlite
hwscom16 小时前
Windows服务器如何免费实现文件防篡改功能
运维·服务器·windows
HMS工业网络16 小时前
STP、RSTP到N-Ring的演进之路
服务器·开发语言·php
ID_1800790547316 小时前
企业级淘宝评论 API最简说明,JSON 返回示例
java·服务器·前端
无情的西瓜皮16 小时前
MCP协议实战:从零搭建一个AI Agent工具服务器,让大模型真正“动手干活“
运维·服务器·人工智能·mcp
历程里程碑16 小时前
54 深入解析poll多路复用技术
java·linux·服务器·开发语言·前端·数据结构·c++