美文网首页
C# 创建类型 02

C# 创建类型 02

作者: JeetChan | 来源:发表于2019-08-07 17:13 被阅读0次

声明

本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 2 课—— class - 构造函数与析构函数 对应。可在 GitHub 中查看 C# 视频教程的配套PPT

本文主要包括以下内容:

  1. Constructors(构造函数)
  2. Deconstruct (解构函数)

Constructors(构造函数)

在 class 或 struct 上运行初始化代码。和定义方法差不多,但构造函数的名和类型名一致,返回类型也和类型一致,并且返回类型就省略不写了。C#7,允许单语句的构造函数写成 expression-bodied 成员的形式。

public class Panda
{
    string name; // Define field
    public Panda (string n) // Define constructor
    {
        name = n; // Initialization code (set up field)
    }
    // C#7
    // public Panda (string n) => name = n;
}
...
Panda p = new Panda ("Petey"); // Call constructor

构造函数重载

class 和 struct 可以重载构造函数,调用重载构造函数时使用 this。当同一个类型下的构造函数 A 调用构造函数 B 的时候,B 先执行,可以把表达式传递给另一个构造函数,但表达式本身不能使用 this 引用,因为这时候对象还没有被初始化,所以对象上任何方法的调用都会失败。但是可以使用 static 方法。

using System;
public class Wine
{
    public decimal Price;
    public int Year;
    public Wine (decimal price) { Price = price; }
    public Wine (decimal price, int year) : this (price) { Year = year; }
}

无参构造函数

对于 class,如果你没有定义任何构造函数的话,那么 C# 编译器会自动生成一个无参的 public 构造函数。但是如果你定义了构造函数,那么这个无参的构造函数就不会被生成了。

构造函数和字段的初始化顺序

字段的初始化发生在构造函数执行之前,字段按照声明的先后顺序进行初始化。

class Player
{
    int shields = 50; // Initialized first
    int health = 100; // Initialized second
}

非 public 的构造函数

构造函数可以不是 public 的,如单例模式。

public class Class1
{
    Class1() {} // Private constructor
    public static Class1 Create (...)
    {
        // Perform custom logic here to return an instance of Class1
        ...
    }
}

Deconstructor(C#7)(解构函数)

C#7 引入了 deconstructor 模式,作用基本和构造函数相反,它会把字段反赋给一堆变量。方法名必须是 Deconstruct, 有一个或多个 out 参数,Deconstructor 可以被重载,Deconstruct 这个方法可以是扩展方法。

class Rectangle
{
    public readonly float Width, Height;
    public Rectangle (float width, float height)
    {
        Width = width;
        Height = height;
    }
    public void Deconstruct (out float width, out float height)
    {
        width = Width;
        height = Height;
    }
}
// To call the deconstructor, we use the following special syntax:
var rect = new Rectangle (3, 4);
(float width, float height) = rect; // Deconstruction
Console.WriteLine (width + " " + height); // 3 4
constructors.jpg

参考

Constructors (C# Programming Guide)

What's new in C# 7.0

相关文章

  • C# 创建类型 02

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 2 课...

  • C#类型

    《C#图解教程》学习记录 C#程序是一组类型声明。类型是一种用来创建数据结构的模板。 预定义类型 C#提供了16种...

  • 从零开始学C#--被施了魔法的变量

    本篇属于:从零开始学C# | 基础篇 | 02 数据类型 值类型值类型是由System.ValueType类型派生...

  • C# 创建类型 04

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 4 课...

  • C# 创建类型 03

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 3 课...

  • C# 创建类型 01

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 1 课...

  • 02创建和管理数据库表

    02创建和管理数据库表 数据类型: 1、String 类型。 2、Number 类型。 3、Date 类型。 4、...

  • C#语言入门详解006

    006 C#类型、变量与对象详解 目录 *什么是类型*类型在C#语言中的作用*C#语言的类型系统*变量、对象与内存...

  • C#之托管与非托管资源

    C#中的数据类型 C#中的所有类型都是(直接或间接)从System.Object类型派生的。C#的类型被分成两大类...

  • C# 枚举和嵌套类型

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 10 ...

网友评论

      本文标题:C# 创建类型 02

      本文链接:https://www.haomeiwen.com/subject/dyradctx.html