当前位置: 首页 > article >正文

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

实例构造函数

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

  • 构造函数用于初始化类实例的状态。
  • 如果希望能从类的外部创建类的实例,需要将构造函数声明为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";}     //构造函数0public Class1() {ID=val;nameof="Nemo";} //构造函数1public Class1(String name){Name=name;}  //构造函数2public void SoundOff(){Console.WriteLine($"Name{Name},Id{Id}");}
}class Program
{static void Main(){Class1 a=new Class1();       //调用构造函数0b=new Class1(7);      //调用构造函数1c=new Class1("Bill"); //调用构造函数2a.SoundOff();b.SoundOff();c.SoundOff();}
}

默认构造函数

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

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

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

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

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

http://www.lryc.cn/news/2383516.html

相关文章:

  • RabbitMQ——消息确认
  • 测试W5500的第2步_使用ioLibrary库创建TCP客户端
  • 深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理
  • 【Java】泛型在 Java 中是怎样实现的?
  • 开源安全大模型Foundation-Sec-8B实操
  • 【JavaWeb】MySQL
  • 微信小游戏流量主广告自动化浏览功能案例5
  • 【C++ Primer 学习札记】函数传参问题
  • 软件的技术架构、应用架构、业务架构、数据架构、部署架构
  • CSS 文字样式全解析:从基础排版到视觉层次设计
  • 【高德开放平台-注册安全分析报告】
  • [特殊字符] React Fiber架构与Vue设计哲学撕逼实录
  • RabbitMQ的简介
  • 混合学习:Bagging与Boosting的深度解析与实践指南
  • 使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第一部分)
  • 大语言模型 16 - Manus 超强智能体 Prompt分析 原理分析 包含工具列表分析
  • 物联网赋能7×24H无人值守共享自习室系统设计与实践!
  • 以太联Intellinet带您深度解析PoE交换机的上行链路端口(Uplink Ports)
  • 浏览器播放 WebRTC 视频流
  • 从零开始:使用 PyTorch 构建深度学习网络
  • 分类算法 Kmeans、KNN、Meanshift 实战
  • 【razor】回环结构导致的控制信令错位:例如发送端收到 SR的问题
  • 网络安全之身份验证绕过漏洞
  • MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库
  • vscode打开vue + element项目
  • Django框架的前端部分使用Ajax请求一
  • cmd如何从C盘默认路径切换到D盘某指定目录
  • 693SJBH基于.NET的题库管理系统
  • [Vue]跨组件传值
  • 每日Prompt:实物与手绘涂鸦创意广告