.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 ...
随机推荐
- 生成表结构数据库文档sql语句
CREATE PROCEDURE [dbo].[生成表结构数据库文档]ASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from ...
- 自学python 2.
1.T or F 1>1 or 3<4 or 4>5 and 2>1 and 9>8 or 7<6 t not 2>1 and 3<4 or 4> ...
- DBUtils数据库连接池
DBUtils pip install DBUtils 模式一: 为每个线程创建一个连接.(内部是通过threading.local实现的) 模式二: 创建一定个数的连接,所有线程都来连接池中获取.( ...
- MVC |分部视图 PartialView()
介绍如何定义 其实它和普通视图没有多大区别,只是创建分部视图的时候视图里没有任何内容,你需要什么标签你自己加.第二就是分部视图不会执行_ViewStart.cshtml中的内容) 控制器 Partia ...
- luogu P3250 [HNOI2016]网络
传送门 考虑只有一个询问,怎么使用暴力枚举最快的得到答案.因为要求最大的,所以可以把链按权值从大往小排序,然后往后扫,找到一个没有交的就是答案,直接退出 一堆询问,可以考虑整体二分,先二分一个值\(m ...
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
错误描述:当在ASP.NET应用程序中引用Microsoft Excel组件,并在程序中调用时,部署到服务器上经常会遇到以下的错误:检索 COM 类工厂中 CLSID 为{00024500-0000- ...
- ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常.本文作为学习笔记,记录了使用Global.asax文件的Applicati ...
- 批量清除react中的计时器小组件
在Timers的父组件被卸载时,批量清除各个计时器.
- 算法-链的操作(一)-合并两个排序的链接(no.25)
合并两个排序的链接(no.25) 把下面连个排好序的链,从小到大排序链接. list1 : 1 -> 6 -> 8 list2 : 2-> 5 -> 9 def merge(h ...
- (1)Java数据结构--图文并茂-分析优缺点
转:常见Java数据结构&优缺点 - /画家/ - 博客园http://www.cnblogs.com/earl-yongchang/p/5639161.html 图片也是引用过来的,没有重新 ...