热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析C#中的构造函数及其应用

在本文中,我们将深入探讨C#中的构造函数及其应用场景。通过引入构造函数,可以有效解决在访问类属性时反复赋值导致的代码冗余问题,提高代码的可读性和维护性。此外,还将介绍构造函数的不同类型及其在实际开发中的最佳实践。

【前言】


结合上一篇博客,针对当我们访问类的属性时,反复赋值,出现代码冗余的问题,这次我们引进一个新的解决办法,就是构造函数,直接传递参数就可以实现属性值的初始化。


【内容】


普通办法访问属性缺点:

当我们访问类的属性的时候,需要多次赋值,出现了冗余的代码;当我们对zsStu.Age=-88,当对写入操作没有限制的时候,就破坏了数据的完整性,并且不安全。

static void Main(string[] args){student zsStu = new student();zsStu.Name = "张三";zsStu.Age = 18;zsStu .Gender ='男';zsStu .Chinese =90;zsStu .Math =95;zsStu .English =80;zsStu .sayhello ();zsStu .score ();//冗余Console.WriteLine("==============================");student xlStu = new student();xlStu.Name = "小兰";xlStu.Age = 16;xlStu.Gender = '女';xlStu.Chinese = 95;xlStu.Math = 85;xlStu.English = 60;xlStu.sayhello();xlStu.score();Console.ReadKey();}




解决:构造函数

这时我们就要定义构造函数:构造函数就是一个方法,但方法名是类名。




作用:

通过构造函数可以避免繁琐的赋值操作,属性为只有读操作,这样保证了属性的安全很完整性,但是属性不能赋值,如何对属性操作呢?这时可以通过构造函数对属性的值进行初始化。 




如何定义?

下面就是定义了一个Person类的构造函数,括号里面的是参数,把参数的值赋给字段。

namespace _03_类的构造函数
{public class Person{//Person类的构造函数public Person(string name,char gender,int age){this.name = name;//当前字段=参数.把变量的值赋值给字段this.age = age;this.gender = gender;}private string name;public string Name{get { return name; } }private char gender;public char Gender{get { return gender; } }private int age;public int Age{get { return age; } }

怎么实现属性的初始化操作?
当我们在主函数中实例化并调用这个方法的时候,会把值传递给上面的在Person类中定义的构造函数,也就是传参,然后把传递过来的值赋值给字段。

class Program{static void Main(string[] args){Person per = new Person("张三",'男',18);//利用构造函数给里面的字段赋值。per.Show();Console.ReadKey();//第一 之前那么赋值麻烦,繁琐//第二 变成只读,安全//per.Name = "张三";//只读,没那么容易赋值;该怎么赋值?//构造函数的出现,解决了赋值麻烦的问题}}

优点:
1.不会像之前那样繁锁地赋值
2.当为某个类定义了构造函数之后,这个类的属性为只读属性,通过构造函数就可以初始化该属性,这样保证了属性值得安全和完整性。

构造函数的重载:
在一个类中可以定义多个构造函数,以便提供多个不同的初始化方法,这些构造函数有相同的名字,只是参数的数目和类型不同。

下面定义了三个构造函数,只是参数不同。

public Person(string name, char gender, int age)//有参的构造函数,原来默认无参数的被覆盖了{this.name = name;//当前字段=参数.把变量的值赋值给字段this.age = age;this.gender = gender;}//想用到无参数的怎么办,构造函数的重载public Person() //无参数的构造函数{ }public Person(string name){this.name = name;}

构造函数如何使用?
在主函数中使用重载的构造函数,需要注意:对于对象来说,每个对象只执行其中一个构造函数。

class Program{static void Main(string[] args){//写一个类,如果没有写任何的构造函数,那么这个类有个默认无参数的构造函数;Person per = new Person();Person per1=new Person("张三",'男',18);Person per2 = new Person("小兰");}}


【总结】

构造函数是一种特殊的方法,没有返回值,没有void声明。直接传递参数就可以实现赋值操作,默认的是一个无参的构造函数,如果定义了一个有参的构造函数,则无参的就不在存在。如果想使用,则需要重新声明。









推荐阅读
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
author-avatar
muc4093631
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有