【c# 学习笔记】构造函数
构造函数 主要用于创建类的实例对象。当调用构造函数创建一个对象时,构造函数会为对象分配内存空间,并初始化类的成员。构造函数分为实例构造函数和静态构造函数两种。
1.实例构造函数
实例构造函数用于创建和初始化类的实例。使用new运算符创建对象的过程,其实就是在调用实例构造函数,来初始化类中所有实例成员。如下:
public class Person
{ private string name; //实例构造函数
public Person ()
{
name = "Learning Hard";
}
}
构造函数有以下特点:
① 构造函数可以进行方法重载。实现了方法重载,就可通过不同的方式来完成类的实例化。
② 如果没有为类显式地定义一个构造函数,则c#编译器会自动生成一个函数体为空的默认无参的实例构造函数。
③ 可以对实例构造函数指定访问级别,即可以使用public、protected和private修饰符来修饰,然而不是任何一个
函数都可以成为实例构造函数,实例构造函数必须满足以下两个条件。
1.构造函数必须和类同名。
2.构造函数不允许有返回类型。
如下:
class Person
{
private string name; public string Name
{
get
{
return name;
}
} public Person ()
{
name = "Learning Hard";
} public Person (string name)
{
this.name = name;
}
}
static void Main(string[] args)
{
Person personWithoutPara = new Person();
Person personWithPara = new Person("肖磊"); Console.WriteLine(personWithoutPara.Name);
Console.WriteLine(personWithPara.Name); Console.Read();
}
2.静态构造函数
静态构造函数用于初始化类中的静态成员,在创建第一个实例或引用任何静态成员之前,CLR都将自动调用静态构造函数。如下:
class Person
{
private static string name; //静态构造函数,仅执行一次 static Person()
{
Console.WriteLine("静态构造函数被调用了");
name = "赵雷舅舅";
} public static string Name
{
get
{
return name;
}
}
}
static void Main(string[] args)
{ Console.WriteLine(Person.Name);
Console.WriteLine(Person.Name);
Console.Read(); }
如上,两次调用了Person对象的静态Name属性,但只输出了一次“静态构造函数被调用了”的语句,这足以说明静态构造函数与
实例构造函数的不同之处--静态构造函数只执行一次。与实例构造函数一样,要成为静态构造函数必须具有以下特点。
① 静态构造函数不能使用任何访问修饰符。
② 静态构造函数不能带有任何参数。
③ 静态构造函数只会执行一次。
④ 不能直接调用静态构造函数。
⑤ 在程序中,程序员无法控制执行静态构造函数的时机。
【c# 学习笔记】构造函数的更多相关文章
- c++学习笔记——构造函数
构造函数定义:每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些函数叫做构造函数. 需要注意的几点: 1:构造函数不能被声明为const的,当我们创 ...
- JavaScript学习笔记-构造函数
什么是构造函数 简单说构造函数是类函数,函数名与类名完全相同,且无返回值.构造函数是类的一个特殊成员函数. JavaScript构造函数 * 在JavaScript的世界里没有类的概念,JavaScr ...
- JS学习笔记-构造函数篇
创建实例 funtion Fn (){ var num = 10; this.x = 100; this.getX = function(){ cons ...
- C++学习笔记-构造函数和析构函数
构造函数和析构函数是C++的重要组成部分,了解构造函数和析构函数有助于深入了解C++ 构造函数 构造函数产生的原因 在C++中,有时候需要在对象创建的时候初始化数据,如果采用普通函数的话,每次初始化都 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
这节课在p26.拷贝构造中讲的很清楚,建议大家耐心的去看下. 什么时候会发生拷贝构造: 对象之间的初始化赋值 使用对象作为变量进行函数传参(通常使用引用来传参从而减去不必要的拷贝构造,提高效率和代码健 ...
- [javase学习笔记]-7.2 构造函数与一般函数的差别
这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...
- [javase学习笔记]-7.5 构造函数须要注意的几个细节
这一节我们简单的说几个在使用构造函数时须要注意的细节. 通过我们前几节的学习,我们对构造函数有了一个比較清楚的认识,当我们在创建对象时.我们会调用构造函数.那么我们在定义和调用构造函数时.须要注意哪些 ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
随机推荐
- SQL 学习指南-数据库使用
1.缺失子句 now() 是MySQL的内建函数,返回当前的日期和时间.在MySQL中可以直接使用下列语句查询: SELECT NOW(); 但是某些数据库规定查询语句必须包含 from 子句,并在其 ...
- div 里面内容水平垂直居中
css .main{ background: #999999; width: 600px; height: 400px; /*采用flex方式*/ display: flex; /*div内容垂直居中 ...
- KMP模板,注释
#include<bits/stdc++.h> using namespace std; queue<int> KMP(string a,string b){//a是主串,b是 ...
- Generator(生成器)函数
一.基础知识 Generator函数是ES6出现的一种异步操作实现方案. 异步即代码分两段,但是不是连续执行,第一段执行完后,去执行其他代码,等条件允许,再执行第二段. 同步即代码连续执行. 1. G ...
- Hello 2019题解
Hello 2019题解 题解 CF1097A [Gennady and a Card Game] map大法好qwq 枚举每一个的第\(1,2\)位判是否与给定的重复即可 # include < ...
- CF1174C Ehab and a Special Coloring Problem(数论)
做法 与\(x\)互质的数填不同的数,把有向关系表示出来,发现边数是不能承受的 反过来想,成倍数关系填相同的数,把这些数想象成一条链,而这条链开始的数一定是质数,\(\sum\limits_{prim ...
- checkbox取反
var qxs = document.getElementsByName("qx"); for(var i=0;i<qxs.length;i++){ var e=qxs[ ...
- OpenFOAM 中的边界条件(二)【转载】
转载链接:http://xiaopingqiu.github.io/2016/04/02/Boundary-conditions-in-OpenFOAM2/ 本篇在上一篇的基础上来解读 OpenFOA ...
- 【linux】保存屏幕日志log
例如: #!/bin/bash #LOG="examples/mnist/lenet_log_mylog" LOG="LOG/log.txt.`date +'%Y-%m- ...
- vue-cli构建路径加载资源出错问题
这份文档是对应 @vue/cli 3.x 版本的,官方文档https://cli.vuejs.org/zh/guide/ 项目打包执行npm run build的时候,打开dist目录的index.h ...