C#基础知识整理:基础知识(3) 类的构造
发布日期:2021-11-07 06:40:44
浏览次数:10
分类:技术文章
本文共 2335 字,大约阅读时间需要 7 分钟。
我们定义了YSchool,YTeacher类,实例化对象时:
YSchool shool1 = new YSchool(); shool1.ID = 1; shool1.Name = "清华附中"; YSchool school2 = new YSchool(); school2.ID = 2; school2.Name = "北师大附中";
这样写对不对呢,其实在逻辑上是不正确的,因为实例化对象时,它的属性应该是和实例化一起就有的,而不是后来再加属性。在程序中表现就是,属性要有初值。
所以,在类中就要有这样一个方法,无返回类型,方法名和类名相同,有参数类表或者没有参数列表。它就是构造方法,俗称“构造器”或“构造函数”。一个类中可以有一个或多个构造函数,当然有时你没写构造函数,这并不代表这个类就没有构造函数,它依然有一个默认的构造函数的。如果使多个构造函数的话,它们各自的参数列表必须不同。 下面以YSchool为例完善这个类。////// YSchool类的id和name是它的固有属性,它的值应该是确定的。 /// 实例化的同时对属性赋初值,用到构造函数。 /// public class YSchool { private int id = 0; private string name = string.Empty; public int ID { get { return this.id; } } public string Name { get { return name; } } ////// 没有参数的构造器称之为“默认构造器”;如果没有写一个构造器,那么 ///系统也会提供一个默认的构造器,所以说类至少有一个构造器; ///当然,如果系统提供的默认构造函数,则属性初值为声明时赋的初值,如果声明 ///未赋初值,则是“类型默认值”,比如0或者null。 /// public YSchool() { this.id = 0; this.name = @"清华附中"; } ////// 带有参数列表的构造函数, /// 属性的值就是传入的列表的值。 /// /// /// public YSchool(int id, string name) { this.id = id; this.name = name; } public YSchool(int id) { this.id = id; this.name = @"陕科大附中"; } }
class Program { static void Main(string[] args) { YSchool shool1 = new YSchool(); YSchool school2 = new YSchool(1, @"西工大附中"); YSchool school3 = new YSchool(2); Console.ReadKey(); } }
上面还修改了id和name的get/set属性,都改为只有get,因为这些属性值都是固有属性,实例化之后再赋值也就不符合逻辑了。也就是这些属性是只读的。
代码中提到了默认值,这里简单说一下。在声明字段的时候,可以用赋值运算符“=”给字段直接加一个值,比如
string name = string.Empty;
这个不是给变量赋值,默认值只是一种形式,真正给变量赋值还是在构造函数中。一般规范的代码都要求声明变量时要赋初值的。如果生命时没有赋值的字段,都会由编译器增加一句赋值代码,将该字段赋值为设定的默认值。其实,无论我们是否给字段增加了默认值,字段都具备默认值的,只不过如果我们没有人为增加默认值,字段的默认值将是0或null。
这里还有一点要注意,前面提到过系统默认的构造函数,但是当定义了构造函数后,系统默认构造函数就不存在了。因此如果某些情况下,既要用到默认构造函数和带参数的构造函数,就要手动定义默认构造函数了。比如,public YSchool() { }
或者
public YSchool() { this.id = 0; this.name = @"尚进"; }
综上所述实例化类的规范表达式应该是:类名 实例名 = new 类名(构造函数参数列表);
转载地址:https://blog.csdn.net/yysyangyangyangshan/article/details/7687610 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月20日 07时40分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上手Pandas,带你玩转数据(2)-- 使用pandas从多种文件中读取数据
2021-06-30
上手Pandas,带你玩转数据(3)-- pandas数据存入文件
2021-06-30
爬虫遇上不让右击、不让F12的网站,该怎么办?
2021-06-30
上手Pandas,带你玩转数据(4)-- 数据清洗
2021-06-30
上手Pandas,带你玩转数据(5)-- 数据转换与数据定位
2021-06-30
上手Pandas,带你玩转数据(6)-- 摆脱对pandas可视化丑图的刻板印象吧
2021-06-30
linux shell — 6.初识 EXT2 文件系统
2021-06-30
Java — String(字符串)
2021-06-30
linux shell — 7.linux 磁盘与文件系统管理
2021-06-30
linux shell — 8.linux 磁盘与文件系统管理(2)
2021-06-30
Java — 事件监听、事件处理 初体验
2021-06-30
linux — Centos 7(第一天) 使用时出现的问题及解决方法
2021-06-30
数据结构 — 图的概述
2021-06-30
Centos 7 上 Eclipse 无法输入中文解决方法
2021-06-30
数据结构 — 图之邻接表存储创建和深度优先遍历
2021-06-30
Centos 7 — Gedit 配色方案
2021-06-30
数据结构 — 图 之 广度优先遍历
2021-06-30