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基础之构造函数的更多相关文章

  1. Java基础八--构造函数

    Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...

  2. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

  3. 黑马程序员——JAVA基础之构造函数,构造代码块

    ------- android培训.java培训.期待与您交流! ---------- 构造函数特点: 1.  函数名与类名相同 2.  不用定义返回值类型 3.  不可以写return语句 构造函数 ...

  4. 【C++基础】构造函数

    说说你对构造函数的理解? 构造函数:对象创建时,利用特定的值构造对象(不是构造类),将对象初始化(保证数据成员有初始值),是类的一个public 函数 ①   与类同名 ②   无返回值 ③   声明 ...

  5. c++基础语法 构造函数 析构函数 类的组合

    1 构造函数 1.不能指定任何返回值,甚至连void都不能有. 2.与Java不同,c++不同new对象,对于无参的构造函数声明对象时括号应该省略. 2 析构函数 1. 前加~,不能有参数,不能有返回 ...

  6. [C++基础]在构造函数内部调用构造函数

    看下面的面试题: #include <iostream> using namespace std; struct CLS { int m_i; CLS( int i ) : m_i(i){ ...

  7. JAVA_SE基础——29.构造函数

    黑马程序员入学Blog... jvm创建Java对象时候需要调用构造器,默认是不带参数的.在构造器中,你可以让jvm帮你初始化一些参数或者执行一系列的动作. 它是对象创建中执行的函数,及第一个被执行的 ...

  8. JS基础(三)构造函数

    JS中的构造函数 <script language="JavaScript"> window.onload = function(){ function Bottle( ...

  9. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

随机推荐

  1. es6之箭头函数

    => 箭头函数是ES6增加的函数表达式.将function关键字和函数名都删掉,并使用“=>”连接参数列表和函数体(低版本浏览器不支持) 箭头函数看上去只是语法的变动,其实也影响了this ...

  2. oracle java连接配置

    oracle数据库连接使用ojdbc驱动.使用tomcat-jdbc连接池. pom.xml: <!-- tomcat jdbc --> <dependency> <gr ...

  3. Information Retrieval 倒排索引 学习笔记

    一,问题描述 在Shakespeare文集(有很多文档Document)中,寻找哪个文档包含了单词“Brutus”和"Caesar",且不包含"Calpurnia&quo ...

  4. C# RestoreDirectory

    OpenFileDialog与SaveFileDialog都有RestoreDirectory属性,这个属性默认是false,打开一 个文件后,那么系统默认目录就会指向刚才打开的文件.如果设为true ...

  5. Windows下开启composer镜像服务来安装yii

    网上关于使用composer的安装教程挺多的,但是作为新手的我,觉得好凌乱,不断尝试后,终于安装好了.最后总结出,用开启composer的镜像服务来安装yii是最好的啦,当然,归档文件的做法有利有弊就 ...

  6. git 重命名 origin

    git remote rename origin old-origin git remote add origin https://gitlab.com/wuxianqiang/my-project. ...

  7. Python 13 简单项目-堡垒机

    本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...

  8. 转:springmvc常用注解标签详解

    Spring5:@Autowired注解.@Resource注解和@Service注解 - IT·达人 - 博客园--这篇顺序渐进,讲得超级好--此人博客很不错http://www.cnblogs.c ...

  9. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  10. openstack Q版部署-----网络服务(neutron)安装部署(7)

    一.数据库配置(控制节点) 控制节点创建数据库: CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'lo ...