书评:《C# Primer》 by Joe Casad

书评:《C# Primer》

Joe Casad / 陈硕 译

译注:Joe Casad是 C/C++ Users Journal 杂志的主编(editor-in-chief)。
原文发表于 CUJ Online Exclusives, March 2003,网址为:
http://www.cuj.com/webonly/2003/0303/web0303a/web0303a.htm

基本信息:
书名: C# Primer: A Practical Approach
作者: Stanley B. Lippman
出版商:Addison Wesley Professional, 2001
页数: 400
定价: $44.99

在两年来围绕 .NET 的空前大肆宣传的硝烟散去之后,你也许会问:“究竟 C# 为何物?” 大概正如你所揣想的,世界上真的出现了一门你可能会实际用到的新语言。尽管微软早先为 Java 和 C++ 奏起的挽歌已经证明是错误的,但事实上,几乎所有程序员都能从学习 C# 的基础知识中获益。 Stanley Lippman 的《C# Primer: A Practical Approach》是为那些已工作的而又想把 C# 添加为自己的“保留曲目”的程序员准备的。有编程经验的读者常常不会理睬标有"primer"字样的书,这些读者已经知道什么是循环,而不想看到一些罗嗦的关于普通编程概念的讨论。不过,Lippman 成功地做到在介绍 C# 的同时,避免了从头开始讲授程序设计。因此,这本书可能正是你要找的能迅速引领你上路的书。

Microsoft 曾多次声明,C# 是 .NET framework 的首选编程语言。这个声明总是会引发这样的疑问“谁首选的?”有人听着一两条来自 Microsoft 的小道消息,就开始分析微软这个提法的市场意图,而完全不从技术层面评析这句话的含义。但不管怎么说,这本书能帮你理清“将来有一天会使用 C# 吗?”的问题。毫无疑问, Lippman 视《C# Primer》为他《C++ Primer》的续篇,后者第一版出版于1986年。这也从侧面反映了 C# 是 C++ 的继承和发展。无论如何,要是有人能够站在 C++ 的角度来描述 C# 的话,那个人大概就是 Lippman 了。他目前在 Microsoft 致力于 .NET 的开发,他深厚的 C++ 历史背景一直可以追溯到在 Bell Labs 工作的日子和 Stroustrup 最初的 C++ 实现 (implementation)。《C# Primer》实际上借用了 Kernighan 和 Ritchie 在其经典著作《The C Programming Language》中所采用的叙述方式。在两段概略的引述之后,作者投入到一个简单程序的设计中,并在随后的几章中有系统地为这套课程新增一层层复杂性。当然,“Hello, world”几乎是为所有编程书籍所采用的标准叙述方式,然而许多尝试采用这种记述方式的书实际上并没有领悟其精髓,它们简直一文不值。作者必须严格恪守每次只增加介绍一个语言要素的原则,还必须克制发表海阔天空离题万里的长篇大论的欲望。作者还最好有一只能够简洁地阐明"纷繁细节的本质"与"技术的来龙去脉"的生花妙笔。这些 Lippman 都做到了。

在扼要介绍完基本的 C# 组件和概念(诸如继承(inheritance)、异常(exceptions) 和尤为重要的垃圾回收机制(garbage collection))之后,作者用了整章的篇幅来讲类的设计(class design),随后又用一章来论述 C# 中的面向对象程序设计(object-oriented programming)。面向对象这章的内容很好地体现了 Lippman 的讲述方法(也充分印证了本书的副标题--实践之路):尽管 Lippman 包含了所有必要的解说,然而对于完全从零开始学习面相对象程序设计的新手来说,叙述还是显得稍快了些。作者暗定的目标是,针对已经对面向对象程序设计有所了解的读者,为他们提供在 C# 中使用面向对象的编程方法的必备知识。

安排完语言的介绍之后,作者花一章的篇幅来讲解如何利用 Windows Forms Designer 来制作 C# 的图形用户界面(GUI),然后再用一章来介绍 ASP.NET 的 Web Forms 设计工具。其它章节则涵盖了.NET 的核心概念,如 System 命名空间(namespace)和CLR(Common Language Runtime)。和本书的其他部分一样,后面这几章的着眼点并不在于把作者知道的一切都告诉读者,而是在于组织素材以求达到最佳的教育效果和指导意义。

如果你在寻求一本厚重的,几乎回答了所有有关 .NET 的问题的案头参考书,那么或许你应该把目光投向别处。不过,如果你是一名 C++ 程序员,想成为 C# 程序员而又不想花费太多的时间和精力,就请试试看 Lippman 的这本《C# Primer》吧。

<.完.>
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
作为核心计算机技术成熟,完整的参考书籍,Primer Plus系列历经十数年不衰,因为它能够满足那些渴望通过全面理解相关技术继续深造的程序员和开发者的需要。通过学习C Primer Plus(第五版)中文版,你将奠定坚实的C编程基础。 与以前的版本一样,作者的目标仍旧是为读者提供一本入门性、条理清晰、见解深刻的C语言教程。作者把编程概念和C语言的细节很好地融合在一起。通过大量短小精焊的范例演示一两个概念,为读者提供了很好的练习机会,有助于读者迅速掌握所讲的知识。每章都提供了复习题和编程练习,进一步强调了重要的信息,有助于读者消化那些难于理解的概念。本书不仅适用于希望系统学习C语言编程的学生,也适用于那些精通其他高级语言编程,但渴望更好地掌握C语言这门核心语言的开发人员。 C Primer Plus(第五版)中文版专门针对C语言的最新标准C99而作,它覆盖了这个新标准所引入的所有重要的新特性,并对读者关注的以下几个主题提供了详尽的信息。 扩展的整数类型。 扩展的字符支持。 布尔类型的支持。 变长数组。 复合文字。 指定初始化项目。 扩展的计算支持。 内联函数 第1章 概览 1.1 C语言的起源 1.2 使用C语言的理由 1.3 C语言的发展方向 1.4 计算机工作的基本原理 1.5 高级计算机语言和编译器 1.6 使用C语言的7个步骤 1.7 编程机制 1.8 语言标准 1.9 本书的组织结构 1.10 本书体例 1.11 总结 1.12 复习题 1.13 编程练习 第2章 C语言概述 2.1 C语言的一个简单实例 2.2 实例说明 2.3 一个简单程序的结构 2.4 使程序可读的技巧 2.5 更进一步 2.6 多个函数 2.7 调试 2.8 关键字和保留标识符 2.9 关键概念 2.10 总结 2.11 复习题 2.12 编程练习 第3章 数据和C 3.1 示例程序 3.2 变量与常量数据 3.3 数据数据类型关键字 3.4 C数据类型 3.5 使用数据类型 3.6 参数和易犯的错误 3.7 另一个例子转义序列 3.8 关键概念 3.9 总结 3.10 复习题 3.11 编程练习 第4章 字符串和格式化输入/输出 4.1 前导程序 4.2 字符串简介 4.3 常量和C预处理器 4.4 研究和利用printf()和scanf() 4.5 关键概念 4.6 总结 4.7 复习题 4.8 编程练习 第5章 运算符、表达式和语句 5.1 循环简介 5.2 基本运算符 5.3 其他运算符 5.4 表达式和语句 5.5 类型转换 5.6 带有参数的函数 5.7 一个示例程序 5.8 关键概念 5.9 总结 5.10 复习题 5.11 编程练习 第6章 C控制语句循环 6.1 再探while循环 6.2 while语句 6.4 不确定循环与计数循环 6.5 for循环 6.6 更多赋值运算符+=、-=、*=、/=和%= 6.7 逗号运算符 6.8 退出条件循环do while 6.9 选择哪种循环 6.10 嵌套循环 6.11 数组 6.12 使用函数返回值的循环例子 6.13 关键概念 6.14 总结 6.15 复习题 6.16 编程练习 第7章 C控制语句分支和跳转 7.1 if语句 7.2 在if语句中添加else关键字 7.3 获得逻辑性 7.4 一个统计字数的程序 7.5 条件运算符?: 7.6 循环辅助手段continue和break 7.7 多重选择switch和break 7.8 goto语句 7.9 关键概念 7.10 总结 7.11 复习题 7.12 编程练习 第8章 字符输入/输出和输入确认 8.1 单字符I/Ogetchar()和putchar() 8.2 缓冲区 8.3 终止键盘输入 8.5 创建一个更友好的用户界面 8.6 输入确认 8.7 菜单浏览 8.8 关键概念 8.9 总结 8.10 复习题 8.11 编程练习 第9章 函数 9.1 函数概述 9.2 ANSI C的函数原型 9.3 递归 9.4 多源代码文件程序的编译 9.5 地址运算符& 9.6 改变调用函数中的变量 9.7 指针简介 9.8 关键概念 9.9 总结 9.10 复习题 9.11 编程练习 第10章 数组和指针 10.1 数组 10.2 多维数组 10.3 指针和数组 10.4 函数、数组和指针 10.5 指针操作 10.6 保护数组内容 10.7 指针和多维数组 10.8 变长数组(VLA) 10.9 复合文字 10.10 关键概念 10.11 总结 10.12 复习题 10.13 编程练习 第11章 字符串和字符串函数 11.1 字符串表示和字符串I/O 11.2 字符串输入 11.3 字符串输出 11.4 自定义字符串输入/输出函数 11.5 字符串函数 11.6 字符串例子字符串排序 11.7 ctype.h字符函数和字符串 11.8 命令行参数 11.9 把字符串转换为数字 11.10 关键概念 11.11 总结 11.12 复习题 11.13 编程练习 第12章 存储类、链接和内存管理 12.1 存储类 12.2 存储类说明符 12.3 存储类和函数 12.4 随机数函数和静态变量 12.5 掷骰子 12.6 分配内存malloc()和free() 12.7 ANSI C的类型限定词 12.8 关键概念 12.9 总结 12.10 复习题 12.11 编程练习 第13章 文件输入/输出 13.1 和文件进行通信 13.2 标准I/O 13.3 一个简单的文件压缩程序 13.4 文件I/Ofprintf ( )、fscanf ( )、fgets ( )和fputs ( )函数 13.5 随机存取fseek()和ftell()函数 13.6 标准I/O内幕 13.7 其他标准I/O函数 13.8 关键概念 13.9 总结 13.10 复习题 13.11 编程练习 第14章 结构和其他数据形式 14.1 示例问题创建图书目录 14.2 建立结构声明 14.3 定义结构变量 14.4 结构数组 14.5 嵌套结构 14.6 指向结构的指针 14.7 向函数传递结构信息 14.8 把结构内容保存到文件中 14.9 结构下一步是什么 14.10 联合简介 14.11 枚举类型 14.12 typedef简介 14.13 奇特的声明 14.14 函数和指针 14.15 关键概念 14.16 总结 14.17 复习题 14.18 编程练习 第15章 位操作 15.1 二进制数、位和字节 15.2 其他基数 15.3 C的位运算符 15.4 位字段 15.5 关键概念 15.6 总结 15.7 复习题 15.8 编程练习 第16章 C预处理器和C库 16.1 翻译程序的第一步 16.2 明显常量#define 16.3 在#define中使用参数 16.4 宏,还是函数 16.5 文件包含#include 16.6 其他指令 16.7 内联函数 16.8 C库 16.9 数学库 16.10 通用工具库 16.11 诊断库 16.12 string.h库中的memcpy()和memmove() 16.13 可变参数stdarg.h 16.14 关键概念 16.15 总结 16.16 复习题 16.17 编程练习 第17章 高级数据表示 17.1 研究数据表示 17.2 从数组到链表 17.3 抽象数据类型(ADT) 17.4 队列ADT 17.5 用队列进行模拟 17.6 链表与数组 17.7 二叉搜索树 17.8 其他说明 17.9 关键概念 17.10 总结 17.11 复习题 17.12 编程练习 附录A 复习题答案 附录B 参考资料
第1章 计算机和计算机编程基本概念 1 1.1 C#是一种面向对象编程语言 2 1.2 硬件 3 1.2.1 主存储器的实质 4 1.2.2 数字系统 5 1.2.3 字节 5 1.2.4 文件 6 1.3 软件 6 1.3.1 执行C#程序的大致过程 7 1.3.2 操作系统 7 1.3.3 编程语言和编译器 7 1.3.4 .NET简介 8 1.3.5 在.NET中编译C#源代码 9 1.4 小结 10 1.5 复习题 11 第2章 你的第一个C#程序 12 2.1 软件开发 13 2.2 软件开发过程 13 2.3 算法和伪码 14 2.4 3个不同的错误类型 15 2.5 面向对象编程初次体验 16 2.5.1 面向过程编程及其先天缺陷 16 2.5.2 面向对象编程及其优点 17 2.6 软件重用 19 2.7 .NET中代码重用的基本单元集合 21 2.7.1 从开发者角度看集合 21 2.7.2 从用户角度看集合 22 2.8 .NET框架类库 23 2.9 C#的历史和设计目标 24 2.10 C#背景 24 2.11 C#的设计目标 26 2.12 能用C#编写什么样的程序 27 2.13 创建C#程序的原理 28 2.14 开始编程之前 28 2.15 选择文本编辑器 28 2.16 编写一个简单C#程序的7步 29 2.16.1 打开和使用命令控制台(第1步) 29 2.16.2 输入和保存C#源代码(第2步) 30 2.16.3 将源代码转换成一个PE(.exe)文件(第3步) 32 2.16.4 编译和查找错误(第4步) 32 2.16.5 运行程序(第5步) 33 2.16.6 验证输入(第6步) 33 2.16.7 庆祝的时刻(第7步) 33 2.17 源代码简短分析 33 2.18 语法错误与编译器的注释 34 2.19 小结 34 2.20 复习题 35 2.21 编程练习 35 第3章 C#导游第一部分 36 3.1 简介 37 3.2 抽象和封装 37 3.2.1 抽象(Abstraction) 37 3.2.2 封装(Encapsulation) 38 3.2.3 学习面向对象编程的一个说明 41 3.3 一个交互式的Hello World!程序 42 3.3.1 编写Hello.cs 42 3.3.2 Hello.cs程序的基本元素 44 3.3.3 几个基本知识 51 3.4 小结 55 3.5 复习题 55 3.6 编程练习 56 第4章 C#导游第二部分 57 4.1 简介 58 4.2 SimpleCalculator.cs程序所需元素 58 4.2.1 SimpleCalculator.cs程序清单 58 4.2.2 对SimpleCalculator.cs程序的详细分析 60 4.3 用方法简化你的代码 67 4.4 方法就是构造块用关键字private封装你的Helper方法 68 4.5 小结 69 4.6 复习题 69 4.7 编程练习 70 第5章 你的第一个面向对象C#程序 71 5.1 简介 72 5.2 词汇结构 72 5.2.1 标识符和CaPitaLIcaTioN样式 72 5.2.2 字面值 72 5.2.3 注释和代码诠释 73 5.2.4 分隔符 73 5.2.5 操作符 73 5.2.6 关键字 74 5.3 对电梯模拟的一些思考 74 5.4 概念、目标和电梯模拟程序方案为评价电梯系统搜集有用统计数据 74 5.5 面向对象程序的一个实例 75 5.5.1 程序SimpleElevatorSimulation.cs清单 76 5.5.2 程序的整体结构 78 5.5.3 对SimpleElevatorSimulation.cs程序的深入分析 79 5.5.4 类关系和统一模型语言(UML) 85 5.6 小结 88 5.7 复习题 88 5.8 编程练习 89 第6章 类型第一部分简单类型 90 6.1 简介 91 6.2 概览C#中的类型 91 6.2.1 什么是类型 91 6.2.2 C#一个强类型化语言 92 6.2.3 类型的优点 93 6.2.4 C#类型 94 6.3 简单类型 98 6.3.1 概观简单类型 99 6.3.2 整数类型 102 6.4 Blipos时钟 112 6.4.1 浮点类型 119 6.4.2 decimal类型 123 6.4.3 浮点、decimal和整数值的兼容性 124 6.4.4 显式类型转换 124 6.4.5 常量字面值的符号名字 125 6.4.6 格式化数字值 128 6.4.7 bool类型初步接触 130 6.5 小结 130 6.6 复习题 131 6.7 编程练习 132 第7章 类型第二部分操作符、枚举器和字符串 133 7.1 简介 134 7.2 算术操作符及数字表达式 134 7.3 结合性 137 7.4 括号和优先级 138 7.5 模操作符(%) 139 7.6 一元操作符 143 7.6.1 一元加和一元减 143 7.6.2 自增和自减操作符 144 7.7 判断表达式的类型 146 7.8 在一个表达式中组合不同的类型 148 7.9 访问组件的元数据简介 151 7.10 枚举常量 154 7.11 枚举器操作符 156 7.12 转换 157 7.13 System.Enum方法 157 7.14 字符和文本 157 7.15 char类型 157 7.16 string类型 160 7.16.1 string字面值和string对象 161 7.16.2 逐字字符 161 7.16.3 使用字符串 162 7.16.4 在字符串中嵌入格式化数字 164 7.16.5 使用字符串 167 7.17 小结 178 7.18 复习题 179 7.19 编程练习 180 第8章 流程控制第一部分分支语句及相关概念 181 8.1 流程控制简介 182 8.2 if分支语句 183 8.2.1 简单if语句 183 8.2.2 复合语句 184 8.2.3 可选else子句 185 8.3 比较操作符和布尔表达式 187 8.4 嵌套if语句 189 8.5 多分支if-else语句 193 8.6 逻辑操作符 196 8.6.1 逻辑与(AND)操作符&& 198 8.6.2 逻辑或(OR)操作符|| 200 8.6.3 短路求值和位操作符&与| 202 8.6.4 位异或操作符^ 203 8.6.5 逻辑非(NOT)操作符! 203 8.7 变量的作用域 205 8.8 goto语句 208 8.9 switch语句 210 8.9.1 switch语句规则1 213 8.9.2 switch语句规则2 214 8.9.3 switch语句规则3 216 8.9.4 switch语句规则4 218 8.9.5 使用switch语句 218 8.10 条件操作符 219 8.11 小结 219 8.12 复习题 220 8.13 编程练习 221 第9章 流程控制第二部分迭代语句 222 9.1 遍历、分析和生成数据序列 223 9.2 while循环语句 223 9.3 do-while循环语句 227 9.4 for循环语句 230 9.5 跳转语句break和continue 235 9.5.1 break语句 235 9.5.2 continue语句 236 9.6 结构化编程和结构化的结构 237 9.7 组合赋值操作符 239 9.8 嵌套迭代语句 241 9.9 编程练习 246 9.10 小结 247 9.11 复习题 248 9.12 编程练习 249 第10章 数组第一部分数组基本知识 251 10.1 数组的声明和定义 252 10.2 访问单个数组元素 255 10.3 数组索引越界 259 10.4 调整基于0的数组索引 262 10.5 初始化数组 263 10.6 用foreach语句遍历整个数组 264 10.7 System.Array是一个引用类型 265 10.8 数组和相等性 267 10.9 数组和方法 269 10.9.1 数组元素作为方法中的参数 269 10.9.2 数组引用作为方法参数 270 10.9.3 克隆数组对象 273 10.10 执行数组值相等性比较的方法 276 10.11 命令行参数 277 10.12 使用数组作为方法的返回值 279 10.13 引用对象的数组元素 282 10.14 数组作为类中的实例变量 285 10.15 小结 292 10.16 复习题 293 10.17 编程练习 294 第11章 数组第二部分多维数组——数组检索与排序 295 11.1 多维数组 296 11.1.1 二维数组 296 11.1.2 锯齿数组 311 11.2 多于二维的数组 314 11.3 System.Array的内置方法 317 11.4 特殊数组技术 318 11.5 检索 325 11.5.1 顺序检索(Sequential Search) 326 11.5.2 二分检索(Binary Search) 327 11.5.3 用System.Array的IndexOf方法检索 332 11.6 小结 333 11.7 复习题 333 11.8 编程练习 334 第12章 类解剖第一部分静态类成员和方法的使用 335 12.1 类解剖概览 336 12.2 数据成员(data member) 338 12.2.1 实例变量(instance variable) 338 12.2.2 静态变量(static variable) 338 12.2.3 常量成员(constant member) 344 12.2.4 只读成员(readonly member) 345 12.2.5 声明数据成员概览 345 12.3 函数成员 346 12.3.1 方法 346 12.3.2 静态方法(static methods) 348 12.4 小结 370 12.5 复习题 371 12.6 编程练习 373 第13章 类解剖第二部分 对象创建和垃圾回收 375 13.1 实例构造函数 376 13.1.1 为什么需要实例构造函数 376 13.1.2 使用实例构造函数 378 13.1.3 重载实例构造函数 381 13.1.4 构造函数初始化器 386 13.1.5 私有实例构造函数 388 13.2 静态构造函数 388 13.3 只读成员(readonly member) 389 13.4 垃圾回收自动动态内存管理 390 13.4.1 对象如何被废弃 390 13.4.2 垃圾回收器的任务 393 13.4.3 释放非内存有限资源 394 13.5 小结 405 13.6 复习题 406 13.7 编程练习 407 第14章 类解剖第三部分 编写直观代码 409 14.1 属性 410 14.1.1 属性与存取器和变异器方法 410 14.1.2 使用属性提高效率 415 14.1.3 用属性实现延迟初始化和惰性更新 416 14.2 索引器像数组一样使用对象 419 14.2.1 从索引器所寄居的对象中调用索引器 422 14.2.2 索引器重载同一类中的多索引器 422 14.2.3 避免滥用索引器 426 14.3 操作符重载 427 14.4 用户自定义隐式和显式转换 434 14.4.1 需要用户自定义转换的两种情形 435 14.4.2 使用非用户自定义转换技术 436 14.4.3 用户自定义转换语法 436 14.4.4 综合运用用户自定义和隐式转换 441 14.5 嵌套类型 442 14.5.1 嵌套类的优点 443 14.5.2 简单嵌套类示例 443 14.6 小结 444 14.7 复习题 444 14.8 编程练习 446 第15章 名字空间、编译单元和集合 447 15.1 自定义名字空间 448 15.2 全局匿名名字空间 448 15.3 名字空间和编译单元 449 15.4 嵌套名字空间 450 15.5 名字空间语法 452 15.6 using指示符的更多知识 453 15.7 编译单元、名字空间及集合 455 15.7.1 将几个编译单元编译成一个集合 455 15.7.2 重用集合中的名字空间 458 15.7.3 将名字空间分布到几个集合中 460 15.8 应用Ildasm探索集合 462 15.9 小结 464 15.10 复习题 464 15.11 编程练习 466 第16章 继承第一部分基本概念 467 16.1 继承的必需性 468 16.2 继承基础知识 473 16.3 访问修饰符及继承 480 16.3.1 访问修饰符protected 480 16.3.2 访问私有基类成员 480 16.3.3 internal protected访问修饰符 481 16.3.4 C#的访问修饰符概览 481 16.4 派生类构造函数 482 16.5 索引器也能被继承和覆盖 485 16.6 在基类中调用覆盖函数 487 16.7 通过继承重用.NET框架类库 490 16.8 多级派生类 491 16.9 方法覆盖及重载原理不同 494 16.10 小结 495 16.11 复习题 496 16.12 编程练习 497 第17章 继承第二部分抽象函数、多态及接口 499 17.1 抽象方法、属性、索引器及类 500 17.2 多态(polymorphism) 503 17.2.1 后代类的对象具有多个类型 503 17.2.2 动态捆绑虚方法和(get,set)存取器 503 17.2.3 实例学习使用多态创建简单绘图程序 505 17.3 丢失和重新获取类型信息 511 17.3.1 is操作符 511 17.3.2 对象类型转换 511 17.3.3 as操作符 514 17.4 最终的基类System.Object 514 17.5 隐藏方法 518 17.6 用new和override关键字控制版本 520 17.7 多重继承 522 17.8 接口 523 17.8.1 定义接口 524 17.8.2 实现接口 526 17.8.3 应用接口的一般编程 528 17.8.4 构建接口层次 531 17.8.5 接口转换 532 17.8.6 覆盖虚接口 532 17.8.7 显式实现接口函数 533 17.9 小结 535 17.10 复习题 535 17.11 编程练习 536 第18章 结构 538 18.1 定义结构 539 18.2 装箱和拆箱 541 18.3 用与不用new关键字创建结构 542 18.4 值类型和引用类型 543 18.5 小结 544 18.6 复习题 544 18.7 编程练习 544 第19章 异常处理 545 19.1 异常处理概览 546 19.2 没有try-catch-finally的情形 546 19.3 try和catch块 548 19.4 捕获函数调用链上端的~~~~~~~~
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值