C# 深入理解类(实例构造函数)

news2025/7/13 10:14:35

实例构造函数

实例构造函数是一个特殊的方法,它在创建类的每个新实例时执行。

  • 构造函数用于初始化类实例的状态。
  • 如果希望能从类的外部创建类的实例,需要将构造函数声明为public。
    图7-2阐述了构造函数的语法。除了下面这几点,构造函数看起来很像类声明中的其他方法。
  • 构造函数的名称和类名相同。
  • 构造函数不能有返回值。

构造函数声明
例如,下面的类使用构造函数初始化其字段。本例中,它有一个名为TimeOfInstantiation
的字段被初始化为当前的日期和时间。

class MyClass
{
    DateTime TimeOfInstantiation;  //字段

    ...
    pubic MyClass()                //构造函数
    {
        TimeOfInstantiation =DateTime.Now;   //初始化字段
    }
    ...
}

说明 在学完静态属性那一节后,我们可以仔细看看初始化TimeOfInstantiation那一行。
DateTime类(实际上它是一个结构,但由于还没介绍结构,你可以把它先当成类)是从
BCL中引入的,Now是类DateTime的静态属性。Now属性创建了一个新的DateTime类的
实例,将其初始化为系统时钟中的当前日期和时间,并返回新DateTime实例的引用。

带参数的构造函数

构造函数在下列方面和其他方法相似。

  • 构造函数可以带参数。参数的语法和其他方法完全相同。
  • 构造函数可以被重载。
    在使用创建对象表达式创建类的新实例时,要使用new运算符,后面跟着类的某个构造函数。
    new运算符使用该构造函数创建类的实例。
    例如,在下面的代码中,Class1有3个构造函数:一个不带参数,一个带int参数,一个带
    string参数。Main使用各个构造函数分别创建实例。
class Class1
{
    int Id;
    string Name;

    public Class1(){Id=28;Name="Nemo";}     //构造函数0
    public Class1() {ID=val;nameof="Nemo";} //构造函数1
    public Class1(String name){Name=name;}  //构造函数2

    public void SoundOff()
    {
        Console.WriteLine($"Name{Name},Id{Id}");
    }
}

class Program
{
    static void Main()
    {
        Class1 a=new Class1();       //调用构造函数0
               b=new Class1(7);      //调用构造函数1
               c=new Class1("Bill"); //调用构造函数2

        a.SoundOff();
        b.SoundOff();
        c.SoundOff();
    }
}

默认构造函数

如果在类的声明中没有显式地提供实例构造函数,那么编译器会提供一个隐式的默认构造函
数,它有以下特征。

  • 没有参数。
  • 方法体为空。

如果你为类声明了任何构造函数,那么编译器将不会为该类定义默认构造函数。
例如,下面代码中的Class2声明了两个构造函数。

  • 因为已经至少有一个显式定义的构造函数,所以编译器不会创建额外的构造函数。
  • 在Main中,试图使用不带参数的构造函数创建新的实例。因为没有无参数的构造函数,
    所以编译器会产生一条错误消息。
class Class2
{
    public Class2(int Value) {...}  //构造函数0
    public Class2(String Value){...} //构造函数1
}

class Program
{
    static void Main()
    {
        Class2 a=new Class2();   //错误!没有无参数的构造函数
        ...
    }
}f

说明 可以像对其他成员那样,对实例构造函数设置访问修饰符。可以将构造函数声明为public,
这样在类的外部也能创建类的实例。也可以创建private构造函数,这样在类外部就不
能调用该构造函数,但在类内部可以。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ——消息确认

一、消息确认机制 生产者发送的消息,可能有以下两种情况: 1> 消息消费成功 2> 消息消费失败 为了保证消息可靠的到达消费者(!!!注意:消息确认机制和前面的工作模式中的publisher confi…

测试W5500的第2步_使用ioLibrary库创建TCP客户端

ioLibrary库下载地址:文件下载地址:https://gitee.com/wiznet-hk/STM32F10x_W5500_Examples 源文件下载地址:https://gitee.com/wiznet-hk 没有注册的,只能复制粘贴了。 本文介绍了如何初始化STM32的硬件资源,配置W5500的网络参数&#xff…

深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理

一、模型转换准备 首先确保已完成PyTorch到ONNX的转换:深度学习之用CelebA_Spoof数据集搭建活体检测系统:模型验证与测试。这里有将PyTorch到ONNX格式的模型转换。 二、ONNX转MNN 使用MNN转换工具进行格式转换:具体的编译过程可以参考MNN的…

开源安全大模型Foundation-Sec-8B实操

一、兴奋时刻 此时此刻,晚上22点55分,从今天早上6点左右开始折腾,花费了接近10刀的环境使用费,1天的休息时间,总算是把Foundation-Sec-8B模型跑起来了,中间有两次胜利就在眼前,但却总在远程端口转发环节出问题,让人难受。直到晚上远程Jupyter访问成功那一刻,眉开眼笑,…

【JavaWeb】MySQL

1 引言 1.1 为什么学? 在学习SpringBootWeb基础知识(IOC、DI等)时,在web开发中,为了应用程序职责单一,方便维护,一般将web应用程序分为三层,即:Controller、Service、Dao 。 之前的案例中&am…

微信小游戏流量主广告自动化浏览功能案例5

功能需求: 支持APP单行文本框输入1个小程序链接,在“文件传输助手”界面发送小程序链接并进入。 主要有“文章列表首页”和“文章内容”页面。每个页面支持点击弹窗广告、槽位广告、视频广告入口、视频广告内第三方广告。 弹窗广告、槽位广告、视频广…

软件的技术架构、应用架构、业务架构、数据架构、部署架构

一、各架构定义 1. 技术架构(Technical Architecture) 定义:技术架构关注的是支撑系统运行的底层技术基础设施和软件平台,包括硬件、操作系统、中间件、编程语言、框架、数据库管理系统等技术组件的选择和组合方式。它描述了系统…

CSS 文字样式全解析:从基础排版到视觉层次设计

CSS 文字样式目录 一、字体家族(font-family) 二、字体大小(font-size) 三、字体粗细(font-weight) 四、字体样式(font-style) 五、文本转换(text-transform&#xf…

【高德开放平台-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

RabbitMQ的简介

三个概念 生产者:生产消息的服务消息代理:消息中间件,如RabbitMQ消费者:获取使用消息的服务 消息队列到达消费者的两种形式 队列(queue):点对点消息通信(point-to-point) 消息进入队…

使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第一部分)

第一部分:数据处理 import kagglehub# Download latest version path kagglehub.dataset_download("dylanjcastillo/7k-books-with-metadata")print("Path to dataset files:", path)自动下载该数据集的 最新版本 并返回本地保存的路径 impo…

大语言模型 16 - Manus 超强智能体 Prompt分析 原理分析 包含工具列表分析

写在前面 Manus 是由中国初创公司 Monica.im 于 2025 年 3 月推出的全球首款通用型 AI 智能体(AI Agent),旨在实现“知行合一”,即不仅具备强大的语言理解和推理能力,还能自主执行复杂任务,直接交付完整成…

以太联Intellinet带您深度解析PoE交换机的上行链路端口(Uplink Ports)

在当今网络技术日新月异的时代,以太网供电(PoE)交换机已然成为现代网络连接解决方案中不可或缺的“利器”。它不仅能够出色地完成数据传输任务,还能为所连接的设备提供电力支持,彻底摆脱了单独电源适配器的束缚,让网络部署更加简洁…

分类算法 Kmeans、KNN、Meanshift 实战

任务 1、采用 Kmeans 算法实现 2D 数据自动聚类,预测 V180,V260 数据类别; 2、计算预测准确率,完成结果矫正 3、采用 KNN、Meanshift 算法,重复步骤 1-2 代码工具:jupyter notebook 视频资料 无监督学习&#xff…

网络安全之身份验证绕过漏洞

漏洞简介 CrushFTP 是一款由 CrushFTP LLC 开发的强大文件传输服务器软件,支持FTP、SFTP、HTTP、WebDAV等多种协议,为企业和个人用户提供安全文件传输服务。近期,一个被编号为CVE-2025-2825的严重安全漏洞被发现,该漏洞影响版本1…

MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库

一、引言 在数据库管理中,MySQL 主从复制是一种非常重要的技术,它可以实现数据的备份、读写分离,减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境,适合刚接触数据库和 Docker 的新手…

Django框架的前端部分使用Ajax请求一

Ajax请求 目录 1.ajax请求使用 2.增加任务列表功能(只有查看和新增) 3.代码展示集合 这篇文章, 要开始讲关于ajax请求的内容了。这个和以前文章中写道的Vue框架里面的axios请求, 很相似。后端代码, 会有一些细节点, 跟前几节文章写的有些区别。 一、ajax请求使用 我们先…

cmd如何从C盘默认路径切换到D盘某指定目录

以从C盘cmd打开后的默认目录切换到目录"D:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld"为例 打开cmd 首先点击开始键,搜索cms,右键以管理员身份运行打开管理员端的命令行提示符 1、首先要先切换到D盘 直接输入D:然后回车就可以&…

每日Prompt:实物与手绘涂鸦创意广告

提示词 一则简约且富有创意的广告,设置在纯白背景上。 一个真实的 [真实物体] 与手绘黑色墨水涂鸦相结合,线条松散而俏皮。涂鸦描绘了:[涂鸦概念及交互:以巧妙、富有想象力的方式与物体互动]。在顶部或中部加入粗体黑色 [广告文案…

学习笔记:黑马程序员JavaWeb开发教程(2025.4.8)

12.11 登录校验-Filter-详解(过滤器链) 过滤器链及其执行顺序,一个Filter一个过滤器链,类名排名越靠前(按照ABC这样的顺序),就先执行谁 12.12 登录校验-Filter-登录校验过滤器 获取请求参数&…