using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSGDemo
{
//https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/constructors
//https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/destructors
//https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
//#csg014-01
//类和结构的实例化都需要调用构造函数(Constructors),
//#csg014-02
//默认构造函数
//如果没有为类提供构造函数,则 C# 将默认创建一个构造函数,该函数会实例化对象并将成员变量设置为默认值。
public class Class1
{
}
//#csg014-03
//典型的构造函数
//带参数的类构造函数
public class Person
{
private string last;
private string first;
//为构造函数设置合适的访问修饰符以让使用者能正常的调用
public Person(string lastName, string firstName)
{
last = lastName;
first = firstName;
}
}
//#csg014-04
//带参数的结构构造函数
public struct PersonStruct
{
private int age;
private int weight;
public PersonStruct(int agevalue, int weightvalue)
{
age = agevalue;
weight = weightvalue;
}
}
//#csg014-05
//定义多个构造函数
//类和结构都允许包含多个拥有不同参数的构造函数
public class MultipleConstructor
{
public MultipleConstructor()
{
}
public MultipleConstructor(string strvalue)
{
}
public MultipleConstructor(int intvalue)
{
}
}
//#csg014-06
//调用构造函数与类/结构的实例化
public class Test1
{
public void F()
{
var p = new Person("张", "三");
var ps = new PersonStruct(26, 55);
}
}
//#csg014-07
//静态构造函数
//静态构造函数,类和结构只能包含一个静态构造函数。
//类和结构的静态的构造函数可以用来初始化静态成员。
//如果你不指定一个静态的构造函数,编译器会将类型的所有静态成员初始化为默认值。
//静态构造函数是由CLR自动调用的,无法在你的代码中被调用。
//静态构造函数是在类型的实例或静态成员首次被引用到的时候被调用的。
public class Class2
{
static Class2()
{
}
}
//#csg014-08
//私有(Private)构造函数
//私有构造函数是一种特殊的构造函数,因为它通常只能被类内部的静态成员内被调用。
public class Class3
{
private Class3() { }
public static Class3 GetInstance()
{
return new Class3();
}
}
//#csg014-09
//使用base关键字可以显式的调用基类的构造函数
public class Class4:Class2
{
public Class4() : base()
{
}
}
//#csg014-10
//使用this关键字访问类中的其他构造函数
public class Class5
{
public Class5() { }
public Class5(string str):this()
{
}
}
//#csg014-11
//析构函数(Finalizers/Destructors)
//析构函数用于包含用于清理非托管资源的代码。
//一个类型只能有一个析构函数;结构无法指定析构函数;
//析构函数由GC决定在何时调用
public class Class6
{
~Class6()
{
Console.WriteLine("Destructor called");
}
}
}