.NET基础之构造函数
1.构造函数:
分为实例构造函数、静态构造函数、私有构造函数。
使用new表达式创建某个类的对象时,
1.1实例构造函数:
(1)构造函数的名字与类名相同;
(2)使用new表达式创建类的对象或者结构,会调用其构造函数。并且通常初始化新对象的数据成员;
(3)除非是静态的,否则会为没有构造函数的类,自动生成一个默认的构造函数,并使用默认值来初始化对象字段;
(4)构造函数可以有参数;
(5)构造函数可以以多态的形式存在多个构造函数;
(6)构造函数无返回值类型。
例:声明Test类,有三个构造函数
public class Test
{
int _aa, _bb; public Test()
{
_aa += ;
_bb += ;
Console.WriteLine(string.Format("aa:{0},bb:{1}", _aa, _bb));
}
public Test (int value)
{
_aa += value;
_bb += value;
Console.WriteLine(string.Format("aa:{0},bb:{1}", _aa, _bb));
}
public Test(int x,int y)
{
_aa += x;
_bb += y;
Console.WriteLine(string.Format("aa:{0},bb:{1}", _aa, _bb));
}
}
测试如下:
static void Main()
{
Test test1 = new Test();
Test test2 = new Test();
Test test3 = new Test(, );
}
//Output:
//aa:10,bb:10
//aa:100,bb:100
//aa:1000,bb:1000
但是示例中的构造函数声明,有时会显得太罗嗦,尤其是当构造函数的功能相近时,可以改为如下的写法:
public class Practice
{
int _aa, _bb;
public Practice(int x,int y)
{
_aa += x;
_bb += y;
Console.WriteLine(string.Format("aa:{0},bb:{1}", _aa, _bb));
}
public Practice(int value):this(value,value)
{
}
public Practice():this(,)
{ }
}
或者更进一步,可以改为如下的写法:
public class Play
{
int _aa, _bb;
public Play(int x=,int y=)
{
_aa += x;
_bb += y;
Console.WriteLine(string.Format("aa:{0},bb:{1}", _aa, _bb));
}
}
1.2静态构造函数
(1)静态构造函数不使用访问修饰符;
(2)静态构造函数不具有参数;
(3)在创建第一个实例或引用任何的静态成员之前,将自动调用静态构造函数实现初始化操作;
(4)不能直接调用静态构造函数;
(5)用户无法控制在程序中执行静态构造函数的时间;
(6)如果静态构造函数引发异常,运行时将不会再次调用该函数,并且类型在程序运行所在的应用程序域的生存期内将保持未初始化;
(7)静态构造函数可以和实例构造函数并存。
例:
public static int value = ;
Program()
{
value = ;
}
static Program()
{
value = ;
}
static void Main(string[] args)
{
Console.WriteLine(value); Program p = new Program();
Console.WriteLine(Program.value); Console.ReadLine();
}
打印结果为:(因为静态构造函数的调用会早于构造函数)
//output
1.3私有构造函数
私有构造函数是一种特殊的实例构造函数,通常用于包含静态构造成员的类中。如果类具有一个或多个私有构造函数而没有公共的构造函数,则其他类(除嵌套类外)无法创建该类的实例。
当没有实例字段或实例方法时或者当调用方法以获得类的实例时,私有构造函数可用于阻止创建类的实例。
1.4编写复制构造函数
class Person
{
private string name;
private int age; // Copy constructor.
public Person(Person previousPerson)
{
name = previousPerson.name;
age = previousPerson.age;
} //// Alternate copy contructor calls the instance constructor.
//public Person(Person previousPerson)
// : this(previousPerson.name, previousPerson.age)
//{
//} // Instance constructor.
public Person(string name, int age)
{
this.name = name;
this.age = age;
} // Get accessor.
public string Details
{
get
{
return name + " is " + age.ToString();
}
}
} class TestPerson
{
static void Main()
{
// Create a new person object.
Person person1 = new Person("George", ); // Create another new object, copying person1.
Person person2 = new Person(person1);
Console.WriteLine(person2.Details); // Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: George is 40
Demo地址:
https://download.csdn.net/download/u010312811/10337475
参考:
https://msdn.microsoft.com/zh-cn/library/k6sa6h87(v=vs.100).aspx
https://msdn.microsoft.com/zh-cn/library/kcfb85a6(v=vs.100).aspx
https://msdn.microsoft.com/zh-cn/library/k9x6w0hc(v=vs.100).aspx
https://www.cnblogs.com/cang12138/p/8297270.html
.NET基础之构造函数的更多相关文章
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- [ Java学习基础 ] Java构造函数
构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...
- 黑马程序员——JAVA基础之构造函数,构造代码块
------- android培训.java培训.期待与您交流! ---------- 构造函数特点: 1. 函数名与类名相同 2. 不用定义返回值类型 3. 不可以写return语句 构造函数 ...
- 【C++基础】构造函数
说说你对构造函数的理解? 构造函数:对象创建时,利用特定的值构造对象(不是构造类),将对象初始化(保证数据成员有初始值),是类的一个public 函数 ① 与类同名 ② 无返回值 ③ 声明 ...
- c++基础语法 构造函数 析构函数 类的组合
1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...
- [C++基础]在构造函数内部调用构造函数
看下面的面试题: #include <iostream> using namespace std; struct CLS { int m_i; CLS( int i ) : m_i(i){ ...
- JAVA_SE基础——29.构造函数
黑马程序员入学Blog... jvm创建Java对象时候需要调用构造器,默认是不带参数的.在构造器中,你可以让jvm帮你初始化一些参数或者执行一系列的动作. 它是对象创建中执行的函数,及第一个被执行的 ...
- JS基础(三)构造函数
JS中的构造函数 <script language="JavaScript"> window.onload = function(){ function Bottle( ...
- C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)
知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...
随机推荐
- 解析ArcGis拓扑——检查的流程,以面重叠检查为例
最简单的面重叠错误检查是使用“地理处理”——“面相交”进行检查,其结果是重叠部分提取而成的新面要素类.本例不讲述此种方法. step1 准备待拓扑检查数据 名词: 数据库 DataBase→顾名思义, ...
- docker 系列 - Docker 安装和Hub Mirror地址设置
======================为什么要使用Docker?======================= 容器真是个好东西, (1)容器能提供隔离性; (2)容器能打包环境, 简化部署难度 ...
- Kettle系列: 马进举开源的Kettle通用插件 KettleEasyExpand
扩展Kettle功能, 经常使用 user defined java class 组件, 或者自己开发Java插件. 两种方式都有各自的痛点: 1. 在user defined java class ...
- MySQL Out-of-Band 攻击
概述 当涉及到MSSQL与Oracle时,Out-of-Band 注入是非常好的方式.但我注意到MySQL注入的情况并非如此,于是我准备以自己在SQL注入方面的经验做相关的研究.我们可以利用诸如loa ...
- 如何解决无法成功git commit 和git push
如何解决无法成功git commit 和git push 20155324王鸣宇.20155314刘子健 git add . 成功了 但是git commit无法实现. 我先尝试了卸载git 重新下载 ...
- mysql 单表更新记录UPDATE
1.单表更新 (1)mysql> SELECT * FROM users;+----+----------+----------+-----+------+| id | username | ...
- MySQL api
今天看去年年中写的代码,留意到一个关键时刻能提高效率的api:on duplicate key update: 语法: INSERT INTO INSERT INTO g_iot_user_build ...
- Ubuntu中安装NVIDIA显卡驱动
1.参考: https://blog.csdn.net/xunan003/article/details/81665835 https://www.cnblogs.com/luofeel/p/8654 ...
- PHP WeBaCoo后门学习笔记
PHP WeBaCoo后门学习笔记 - PHP WeBaCoo backdoor learning notes WeBaCoo (Web Backdoor Cookie) 是一款隐蔽的脚本类Web后门 ...
- ue4 编辑器记录
Matinee 编辑器 菜单:Add New Empty Group->选择要变动的Actor->菜单:Add Actor->菜单:Add Key->变更Actor属性-> ...