C# 2010 从入门到精通 学习笔记6 第7章 创建并管理类和对象

2024-06-22 01:38

本文主要是介绍C# 2010 从入门到精通 学习笔记6 第7章 创建并管理类和对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C# 2010 从入门到精通 学习笔记6 第7章 创建并管理类和对象

本章内容

  1. 定义一个类,在其中包含一系列相互关联的方法和数据项
  2. 使用 public 和 private 关键字,控制类成员的可访问性
  3. 使用 new 关键字来创建对象并调用一个构造函数来初始化它
  4. 自己编写并调用构造函数
  5. 使用 static 关键字来创建可由同一个类的所有实例共享的方法和数据

7.1 理解分类

设计一个类的过程就是对信息进行分类,将相关信息放到一个有意义的实体中的过程。

7.2 封装的目的

定义一个类时,封装(Encapsulation)是一个重要原则。它的中心思想是:使用一个类的程序不应该关心类的内部实际如何工作。程序只需创建类的一个实例,然后调用类的方法。只要那些方法能做到它们宣称能做的事情,程序就不关心它们具体是如何实现的。
封装有时也称为信息隐藏(information hiding)。封装实际有以下两个目的:
  1. 将方法和数据合并到一个类中;换言之,为了支持分类。
  2. 控制对方法和数据的访问;换言之,为了控制类的使用。

7.3 定义并使用类

在 C#中,要用一个 class 关键字来定义一个新的类。类的数据和方法位于类的主体中(在两个大括号之间)。
注意:Math 类包含了用于执行数学计算的方法,另外还用一些字段来定义了数学常量。其中,Math.PI 字段包含了值 3.14159265358979323846,这是π的近似值。
在 C#术语中,类中的变量称为字段(field)。
重要提示:类和对象这两个术语不能混淆。类是一个类型的定义,对象则是该类型的一个实例,是在程序运行时才创建的。换言之,类是建筑蓝图,对象是按照这份蓝图来建造的房子。

7.4 控制可访问性

注意:C++程序员请注意,public 或 private 关键字之后不要添加冒号。在每个字段和方法声明中,都必须重复输入 public 或 private 关键字。
提示:类中的字段自动初始化为 0,false 或者 null,具体视类型而定。然而,作为一种良好的编程习惯,你应该显式地初始化字段。

重要提示:不要声明名称只是大小写有别的两个 public 类成员。否则,类就无法供对大小写不敏感的其他语言使用,比如 Microsoft Visual Basic。

7.5 使用构造函数

构造函数(constructor)是一种特殊的方法,它在创建类的一个实例时自动运行。它与类同名,能获取参数,但不能返回任何值(即使是 void)。每个类都必须至少有一个构造函数。如果不提供自己的构造函数,编译器会帮你自动生成一个默认构造函数。但是,编译器生成的默认构造函数不做任何实际的事情。默认构造函数非常好写——只需添加一个与类同名的 public 方法,不让它返回任何值就可以了。
注意:在 C#术语中,默认构造函数是指不获取任何参数的一个构造函数。至于是由编译器生成,还是由自己来写,则并不重要。同时还可以写一系列非默认构造函数(也就是要获取参数的构造函数)。
注意,构造函数被标识为 public。假如省略该关键字,构造函数将默认为 private(这和其他任何方法和字段是一样的)。private 构造函数不能在类的外部使用。
7.5.1 重载构造函数
注意:构造函数在类中的排列顺序是无关紧要的;可以随意采用任何顺序来定义它们。
使用C#语言时要注意:一旦为一个类写了任何构造函数,编译器就不再自动生成默认构造函数。

7.6 理解 static 方法和数据

事实上,并不是所有方法都必须通过类的实例来提供。这些“与众不同”的方法称为工具方法或者实用方法(utility method)。它们通常提供了一个有用的功能,而且这个功能独立于任何具体的类的实例。
在 static 方法中,不能访问类中定义的任何实例字段。相反,只能访问 static 字段。此外,只能直接调用类中的其他 static 方法;非 static 的方法(即实例方法)要求先创建一个对象,然后才能在那个对象上调用那些方法。
7.6.1 创建共享字段
你可以定义一个 static 字段,从而创建一个能在类的所有对象之间共享的字段(非 static 字段则局部于一个类的每个实例)。
提示:在 C#术语中,static 方法(静态方法)也叫做类方法(class method)。然而,static 字段(静态字段)通常不叫做类字段。相反,它们就叫做 static 字段,或者叫做 static 变量(静态变量)。
7.6.2 使用 const 关键字来创建 static 字段
有一种特殊的 static 字段,它的值是永远不会改变的,我们使用 const 关键字来声明这种字段。const 是“constant”(常量)的简称。const 字段虽然也是 static 字段,但在声明时不使用 static 关键字。



这篇关于C# 2010 从入门到精通 学习笔记6 第7章 创建并管理类和对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082923

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

C# 中变量未赋值能用吗,各种类型的初始值是什么

对于一个局部变量,如果未赋值,是不能使用的 对于属性,未赋值,也能使用有系统默认值,默认值如下: 对于 int 类型,默认值是 0;对于 int? 类型,默认值是 null;对于 bool 类型,默认值是 false;对于 bool? 类型,默认值是 null;对于 string 类型,默认值是 null;对于 string? 类型,哈哈,没有这种写法,会出错;对于 DateTime 类型,默

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备