C#构造函数详解
本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
Chinar —— 心分享、心创新! 助力快速理解 构造函数的用法、详解 为新手节省宝贵的时间,避免采坑! |
全文高清图片,点击即可放大观看 (很多人竟然不知道)
1
Constructor —— 构造函数
Constructor 构造函数,基本用法是在类对象声明的时候完成初始化工作
我们以 C# 为例:来简单了解一下构造函数的声明方式
class Chinar { private int a = 1; private int b = 1; private string c = "Chinar"; private object d = 666; //构造函数用来完成 —— 初始化工作 public Chinar() //声明一个名称与类名一样的函数,就是构造函数(可以传你所需要的参数,写你所需的方法) { //每个类,本身默认有一个。如果我们不写明这个 public Chinar()函数,系统仅调用系统默认的。 //自定义构造 public Chinar()函数后,系统只会调用自定义的 Chinar() } //这是一个多参数的构造函数 public Chinar(int a, int b, string c, object d) { } }
2
Fu —— 测试类:Fu
如何用构造函数完成初始化工作
用下面两个例子完全说明
类:Fu 中有多个构造函数,在声明类对象时,如果调用构造函数,会对其内部私有变量进行初始化操作
/// <summary> /// 测试构造函数——需要被构造类 Fu /// </summary> class Fu { private int x;//一个简单的私有字段 /// <summary> /// 构造函数 /// </summary> public Fu() { Console.WriteLine("会先调用这里:这是父类"); } /// <summary> /// 父类中的有参构造方法 /// </summary> /// <param name="x"></param> public Fu(int x) { this.x = x; Console.WriteLine("x赋值完成"); } /// <summary> /// 父类构造C函数 /// </summary> /// <param name="x"></param> /// <param name="b"></param> /// <param name="c"></param> public Fu(int x, int b, string c) { this.x = x; Console.WriteLine("x赋值完成" + x + b + c); } /// <summary> /// 具有7个参数的构造函数 /// </summary> /// <param name="a"></param> /// <param name="a1"></param> /// <param name="a2"></param> /// <param name="a3"></param> /// <param name="a4"></param> /// <param name="a6"></param> /// <param name="a5"></param> public Fu(int a, int a1, int a2, int a3, int a4, int a6, int a5) { Console.WriteLine("最长参数构造运行"); Console.WriteLine(a + "|" + a1 + "|" + a2 + "|" + a3 + "|" + a4 + "|" + a5 + "|" + a6 + "|"); //在函数中让传入参数对Fu类对象进行初始化 //例如有如下多个私有字段,在类对象初始化的时候,对其变量初始化。用构造函数最为简单 this.a = a; //传入参数,在对象实例化后,对其私有变量进行赋值操作 this.a1 = a; this.a2 = a; this.a3 = a; this.a4 = a; this.a5 = a; this.a6 = a; } private int a; private int a1; private int a2; private int a3; private int a4; private int a5; private int a6; }
3
Derived —— 派生类继承自:Fu
书写这个派生类,是为了让新手明白在复杂情况下 base 的具体作用及用法
类: Derived 继承 Fu 类
base :具体作用
当我们没有在子类构造函数中 写上 base(),默认会先调用父类中无参的构造函数,再调用子类
当在有参构造函数后写上base时,只调用子类构造函数中有参的构造函数,隐藏父类无参构造函数
/// <summary> /// 派生类继承父类 /// </summary> class Derived : Fu { /// <summary> /// 会先调用父类的构造函数,然后再调用子类这边的有参构造函数 /// </summary> public Derived() //: base() //重新构造 :调用父类中无参的构造函数 { Console.WriteLine("这是派生类-无参-构造函数"); } private int y; /// <summary> /// 构造函数 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// 当我们没有在子类构造函数中 写上 base(),默认会先调用父类中无参的构造函数 /// 当在有参构造函数后写上base时,只调用子类构造函数中有参的构造函数,隐藏父类无参构造函数 public Derived(int x, int y) /*: base(x)*/ { this.y = y; Console.WriteLine("这是y赋值完成"); } /// <summary> /// 多参数 /// </summary> /// <param name="x"></param> /// <param name="a"></param> public Derived(int x, string a) : base(x, x, x, x, x, x, x) //这里写了 base 会先调用父类,再调用当前子类进行构造 { y = x; Console.WriteLine(a + "第三方法"); }
4
Initialize Constructor —— 初始化,调用构造
实例化类对象,并调用不同构造函数,去构造初始化对象
系统会根据参数的不同,进行不同的构造函数,从而达到初始化效果
/// <summary> /// 程序 /// </summary> class Program { /// <summary> /// 主入口 /// </summary> /// <param name="args"></param> static void Main(string[] args) { Derived d = new Derived(); Console.WriteLine("-----------------------以上为无参构造------------------------------------------"); Derived d1 = new Derived(1, 2); Console.WriteLine("-----------------------以上为2个参数构造---------------------------------------"); Derived d2 = new Derived(1, "1"); Console.WriteLine("-----------------------以上为2个参数构造,6个私变量----------------------------"); //先调用有参的构造函数一旦被调用,无参的构造函数都不会被调用了 //先执行父类的构造函数,才执行子类的 Console.ReadLine(); } }
输出结果:
会先调用这里:这是父类 这是派生类-无参-构造函数 -----------------------以上为无参构造------------------------------------------ 会先调用这里:这是父类 这是y赋值完成 -----------------------以上为2个参数构造--------------------------------------- 最长参数构造运行 1|1|1|1|1|1|1| 1第三方法 -----------------------以上为2个参数构造,6个私变量----------------------------
支持
May Be —— 搞开发,总有一天要做的事!
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠券 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
技术交流群:806091680 ! Chinar 欢迎你的加入
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java.io.IOException: Could not locate executable null\bin\winutils.exe...
在Win7系统Intellij开发工具中调试Spark读取Hbase。运行直接报异常 java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 这应该是在win7系统下没有配置hadoop环境变量的问题!注意在配置hadoop环境变量之前,将下载好的winutils.exe拷贝到hadoop的安装的目录下的bin目录里,winutils.exe下载地址:http://download.csdn.net/detail/chenweijisun/9839521 在配置环境变量的时候,一定要添加“HADOOP_HOME”用户变量再添加到系统变量里最后重启电脑,不然还会出现上面异常,原因在hadoop源码里看到,根据System.getenv("HADOOP_HOME") 来识别hadoop的, private static String checkHadoopHome() { // first check the Dflag hadoop.home.dir wi...
- 下一篇
mysql中blob数据处理
package epoint.mppdb_01.h3c; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInpu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范