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. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  2. [Android] Android : lambda expressions are not supported at this language level(需设置project language level)

    最近在Github上下载一个别人的开源项目 ,里面用到了Javajdk1.8的新特性:Lambda 表达式.而我用的Android studio发现不能用这个Lambda 表达式. 本地环境: And ...

  3. python里的input

    python2和python3的input是不同的 python3的input 对于python3,只有input,官方文档里是这样描述的 def input(*args, **kwargs): # ...

  4. HTML&CSS总结

    HTML 如果把网页比作房子的话,那么HTML就是搭建房子的整体结构,CSS就是对房子进行装修,HTML主要涉及各种标签的使用,总结如下,需要补充的一点是行内标签与块级标签的区别 inline:在一行 ...

  5. Array.apply(null,{length:6}).map()

    map定义和方法 map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理的后值. map()方法按照原始数组元素顺序依次处理元素. 注意: map不会对空数组进行检测 map不会改变原始 ...

  6. spring cloud(学习笔记)微服务启动错误(1)

    今天下午在启动spring cloud微服务的时候,报了这个错误: Error starting ApplicationContext. To display the auto-configurati ...

  7. 【译】第十篇 SQL Server安全行级安全

    本篇文章是SQL Server安全系列的第十篇,详细内容请参考原文. 不像一些其他industrial-strength数据库服务,SQL Server缺乏一个内置保护个别数据记录的机制,称为行级安全 ...

  8. day 11 - 1 装饰器

    装饰器 装饰器形成的过程:最简单的装饰器——有返回值的——有一个参数——万能参数装饰器的作用:不想修改函数的调用方式 但是还想在原来的函数前后添加功能原则:开放封闭原则语法糖:@装饰器函数名装饰器的固 ...

  9. 基于netty实现单聊、群聊功能

    学习资料 https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b6a1a9cf265da0f87595521 收获: 转载 1. Nett ...

  10. 【Math for ML】线性代数-单射,满射,双射,同构,同态,仿射

    I. 映射(Mapping) 1. 单射(Injective) 函数f 是单射当且仅当若f(x) = f(y) 则 x = y. 例子: f(x) = x+5 从实数集\(R\)到\(R\)是个单射函 ...