C# 中不同类型的构造函数

介绍

在本文中,我们将学习 C# 中的构造函数和构造函数类型。C# 中有五种不同类型的构造函数。构造函数用于创建类的对象。以下是 C# 中的构造函数列表。

  • 默认构造函数
  • 参数化构造函数
  • 复制构造函数
  • 静态构造函数
  • 私有构造函数

什么是构造函数?

构造函数是一种用于初始化对象的特殊方法。构造函数在创建对象时调用。构造函数名称必须与其类名相同。构造函数不得有显式返回类型。

构造函数和方法的区别

默认构造函数

没有任何参数的构造函数称为默认构造函数。如果我们不创建构造函数,则类将在创建对象时自动调用默认构造函数。

例子

using System;
namespace DefaultConstructor_Demo
{
    public class Customer
    {
        public string firstName;
        public string lastName;

        public Customer()
        {
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Customer customer = new Customer();
            customer.firstName = "Farhan";
            customer.lastName = "Ahmed";

            Console.WriteLine("Full Name: " + customer.firstName + " " + customer.lastName);
            Console.ReadLine();
        }
    }
}

参数构造函数

至少具有一个参数的构造函数称为参数化构造函数。

例子

using System;
namespace ParameterConstructor_Demo
{
    class ParameterConstructor
    {
        public int FirstNumber;
        public int SecondNumber;

        public ParameterConstructor(int firstNumber, int secondNumber)
        {
            FirstNumber = firstNumber;
            SecondNumber = secondNumber;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ParameterConstructor p = new ParameterConstructor(10, 20);
            int Result = p.FirstNumber + p.SecondNumber;

            Console.WriteLine("Total:" + Result);
            Console.ReadLine();
        }
    }
}

复制构造函数

通过从另一个对象复制变量来创建对象的构造函数称为复制构造函数。

例子

using System;
namespace CopyConstructor_Demo
{
    public class Employee
    {
        public string firstName;
        public string lastName;
        public string position;
        public int salary;

        public Employee()
        {

        }
        // Copy constructor.
        public Employee(Employee employee)
        {
            firstName = employee.firstName;
            lastName = employee.lastName;
            position = employee.position;
            salary = employee.salary;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Employee emp = new Employee();
            Employee emp1 = new Employee(emp);
            Console.WriteLine("Enter your first name:");
            emp1.firstName = Convert.ToString(Console.ReadLine());
            Console.WriteLine("Enter your last name:");
            emp1.lastName = Convert.ToString(Console.ReadLine());
            Console.WriteLine("Enter your position:");
            emp1.position = Convert.ToString(Console.ReadLine());
            Console.WriteLine("Enter your salary:");
            emp1.salary = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("First Name:" + emp1.firstName);
            Console.WriteLine("Last Name:" + emp1.lastName);
            Console.WriteLine("Position:" + emp1.position);
            Console.WriteLine("Salary:" + emp1.salary);
        }
    }
}

静态构造函数

静态构造函数用于初始化任何静态数据或执行只需执行一次的特定操作。它在创建第一个实例或引用任何静态成员之前自动调用。

静态构造函数的特点

  • 静态构造函数不接受任何访问修饰符。
  • 静态构造函数没有参数。
  • 在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。
  • 静态构造函数不能被直接调用。
  • 用户无法控制程序中静态构造函数的执行时间。
  • 静态构造函数的典型用途是当类使用日志文件时,构造函数用于将条目写入该文件。
  • 一个类只能有一个静态构造函数。
  • 它只能访问类的静态成员。

例子

using System;
namespace StaticConstructor_Demo
{
    public class Customer
    {
        public string firstName;
        public string lastName;
        public static string discount;
        public Customer(string FirstName, string LastName)
        {
            firstName = FirstName;
            lastName = LastName;
        }
        static Customer()
        {
            discount = 10 + "%";
        }
        public void CustomerDetails()
        {
            Console.WriteLine("Full Name:{0}", firstName + " " + lastName);
            Console.WriteLine("Discount:{0}", discount + "\n");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Customer c1 = new Customer("Farhan", "Ahmed");
            Customer c2 = new Customer("Abdul", "Jabbar");
            c1.CustomerDetails();
            c2.CustomerDetails();
            Console.ReadLine();
        }
    }
}

私有构造函数

私有构造函数是一种特殊的实例构造函数。它通常用于仅包含静态成员的类中。如果一个类有一个或多个私有构造函数,而没有公共构造函数,则其他类(嵌套类除外)无法创建此类的实例。私有构造函数的用途是为单例类提供服务。单例类是将创建的对象数量限制为一个的类。使用私有构造函数,我们可以确保一次只能创建一个对象

  • 私有构造函数的一个用途是当我们只有一个静态成员时。
  • 它提供了单例类模式的实现。
  • 一旦我们提供了一个构造函数(private/public/any),编译器就不会将无参数的公共构造函数添加到任何类中。

例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrivateConstructor_Demo
{
    public class Candidate
    {
        private Candidate()
        {
        }
        public static int CandidateVisitedForInterview;
        public static int CountCandidate()
        {
            return ++CandidateVisitedForInterview;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // The following comment line will throw an error because constructor is inaccessible
            //Candidate candidate = new Candidate();

            Candidate.CandidateVisitedForInterview = 20;
            Candidate.CountCandidate();

            Console.WriteLine("Interviewed candidates: {0}", Candidate.CandidateVisitedForInterview);
            Console.ReadLine();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/737642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BUCK电路布线规则、EMI分析

电源系列文章目录 本系列文章为博主在学习工作过程中的心得记录,欢迎评论区交流讨论。 BUCK电路工作原理、参数计算及工作模式分析BUCK电路布线规则、EMI分析电源电路中肖特基、续流二极管要求 目录 电源系列文章目录一、PCB布线规则1、输入电感与肖特基摆放2、输…

物理层(计算机网络)

物理层的基本概念 物理层需考虑如何在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。 物理层正是尽可能屏蔽掉传输媒体和通信手段的差异,使物理层上面的数据链路层察觉不了这些差异,只需要考虑如何完成本层的协议和服务&a…

【MySQL】Linux中MySQL的使用及配置

一、字符集修改 1、MySQL8.0之前,字符集都默认是latin1,从MySQL8.0开始,字符集utf8mb4,这意味着,在默认情况下,MySQL8.0之前都是不支持中文的 # 查看字符集信息,主要是character_set_server和…

感应电机转差速度估算

在感应电机矢量控制中,需要计算出感应电机的机械转差速度(同步速度和转子速度之间的差)。以下方程描述了感应电机磁场定向控制 (FOC) 中转差速度值的关系: 如果我们保持转子磁通恒定,并且 d 轴与转子磁通参考系对齐&am…

ArkTS开发系列之导航 (2.7动画)

上篇回顾: ArkTS开发系列之导航 (2.6 图形) 本篇内容:动画的学习使用 一、 知识储备 1. 布局更新动画 包含显式动画(animateTo)和属性动画(animation) 动画类型名称特点显式动画闭包内的变…

CV每日论文--2024.6.24

1、Whiteboard-of-Thought: Thinking Step-by-Step Across Modalities 中文标题:思维白板:跨模式逐步思考 简介:这段话描述了一种利用思维白板提示来增强大型语言模型在视觉推理任务中的性能的方法。 人类在解决需要视觉思考的问题时,通常会…

计算机网络知识点汇总(三)

1.2 计算机网络体系结构与参考模型 1.2.1 计算机网络分层结构 计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之,计算机网络的体系结构就是这个计算机网络及其所应完成的功能的精确定义。要强调的是,这些功能究竟是用何种硬件…

中小企业应该怎么挑选和使用进销存管理系统?

中小企业应该怎么挑选和使用进销存管理系统? 一、中小企业为啥需要进销存系统? 进销存系统,简单来说,就是一套集进货、销售、库存于一体的管理软件。它通过对企业生产经营中物料流、资金流进行条码全程跟踪管理,能提…

LED恒流调光电路

LED等在工作的时候发热较大,所以通常选用铝基板作为底板;常用白色油墨。 LED必须在恒流源电路下工作,下图为最简单的恒流源:B极电压3.3V不变左下侧蓝色的为稳压二极管,由于BE极可以看做二极管,压降为0.7V&…

国产MCU芯片(1):航顺芯片MCU概览

前言: 截止2023年底,全国有3451家芯片设计公司,已经IPO的就有168家,尚未IPO的3283家中超过一半的年营收在1000万以下,迅猛发展的几年的确有些国产芯片开始站上赛道,这也是国际大背景下的一种必然选择,毕竟突然间出现的大市场需要国产顶上,但资本市场是周期性的,国产替…

自动驾驶---Perception之Lidar点云3D检测

1 背景 Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人…

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中

CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中 code review! 文章目录 CMake笔记之CMAKE_INSTALL_PREFIX详解以及ROS中可执行文件为什么会在devel_lib中1.CMAKE_INSTALL_PREFIX详解变量作用设置 CMAKE_INSTALL_PREFIX示例影响范围常见用法特别…

maya模型仓鼠制作

小仓鼠建模(6)_哔哩哔哩_bilibili 20240623作品---个人评价:第一次做的,虽然有点丑,但是还能看!希望后面有些进步

第10章 启动过程组 (识别干系人)

第10章 启动过程组 10.2识别干系人,在第三版教材第361~362页; 文字图片音频方式 视频13 第一个知识点:主要工具与技术 1、数据收集 问卷调查 包括一对一调查、焦点小组讨论,或其他大规模信息收集技术 头脑风暴 头脑风暴&#xff…

章十九、JavaVUE —— 框架、指令、声明周期、Vue-cli、组件路由、Element

目录 一、 框架 ● vue.js 框架 ● 特点 ● Vue 安装 二、 第一个vue程序 ● 创建项目 ​编辑 ● 导入 vue.js ● 创建vue对象,设置属性,使用模版渲染到页面 介绍 — Vue.js (vuejs.org) 三、 vue指令 ● v-text ● v-html ● v-…

5个wordpress成品站主题

Sora索啦高端制造业wordpress主题 红色高端制造业wordpress主题,适合外贸企业出海建独立站的wordpress模板。 https://www.jianzhanpress.com/?p5885 Polar钋啦wordpress外贸主题 制造业wordpress网站模板,适合生产制造企业官方网站使用的wordpress外…

产品体验周刊第1期(2024-6-24)

产品体验 微信公众号改版 微信公众号文章底部改版,原“点赞”“再看”相关的读者互动模块固定底部栏。作者内容与读者反馈本就是一起组成内容的必要元素,相比较于抖音、小红书,微信公众号的改版可能来的稍微晚了一点。 微信输入法 平常发微…

Linux根目录挂载点(/dev/mapper/centos-root)扩容

如果我们在安装系统是采用自定义分区的话,就可以提前规划好这个事情。但是如果平常没注意就直接采用默认安装的方式的话。一旦 根目录的容量耗尽,将会影响业务的运行。今天我们来扩容逻辑卷。 默认安装的话会给home目录分比较多的空间,我们可…

浅析缓存技术

缓存技术的原理 缓存技术通过在内存中存储数据副本来加速数据访问。当应用程序需要数据时,首先检查缓存是否存在数据副本,如果有则直接返回,否则再从原始数据源获取。这种机制大大减少了访问时间,提升了系统的响应速度和整体性能。…

家政预约小程序14权限配置

目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了,小程序开发好之后需要给运营人员提供管理后台,要分配账号、配置权限,我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中,用户分为内…