1.1声明构造函数
调用new实例化类之后,可能会得到忘记初始化的无效的空的字段,构造函数就是用作“运行时”初始化对象实例。
构造函数的特点:
(1)名称与类名相同:构造函数的名称必须与类名完全一致;
(2)没有返回类型:即使返回类型是void也不行;
(3)可以有多个重载形式:可以通过不同的参数列表定义多个构造函数(构造函数重载)。
例子:
public class Player
{
public string Name { get; set; }
public int Health { get; set; }
// 默认构造函数
public Player()
{
Name = "Unknown";
Health = 100;
}
}
1.2默认构造函数
默认构造函数 指没有参数的构造函数。
特点:
(1)无参数:默认构造函数没有任何参数;
(2)自动提供:如果没有定义任何其他构造函数,编译器会自动生成一个默认构造函数;
(3)初始化默认值:对于类中的字段和属性,如果没有显式初始化,它们将被赋予默认值(如int类型为0,string类型为null等)。
一旦添加了 显式的 构造函数,编译器就不再提供默认构造函数。在创建实例时,就必须按照构造函数的规则,进行传参构造实例。
例子:
public class Player
{
public string Name { get; set; }
public int Health { get; set; }
// 没有显式定义构造函数
}
void Start()
{
Player player = new Player();
Debug.Log($"Player: {player.Name}, Health: {player.Health}");
}
当你没有为类显式定义任何构造函数时,编译器会自动为你生成一个无参数的默认构造函数。这个默认构造函数不会显示在你的代码中,但它确实存在,并且会在你创建类的实例时被调用。
形式如下:
public Player()
{
// 默认构造函数不做任何额外初始化
}
1.3对象初始化器
用于初始化对象中所有可以访问的字段和属性。
例子:
public class Player
{
public string Name { get; set; }
public int Health { get; set; }
}
void Start()
{
// 使用对象初始化器创建并初始化Player对象
Player player = new Player
{
Name = "Alice",
Health = 150
};
Debug.Log($"Player: {player.Name}, Health: {player.Health}");
}
1.4重载构造函数
构造函数可以重载。只要参数数量和类型有区别,可同时存在多个构造函数。
应优先选择可选参数而不是重载。
重载例子:
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 无参数的默认构造函数
public Person()
{
Name = "Unknown";
Age = 0;
}
// 带一个参数的构造函数
public Person(string name)
{
Name = name;
Age = 0; // 默认年龄设为0
}
// 带两个参数的构造函数
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
public class Program
{
public static void Main(string[] args)
{
// 使用无参数的构造函数
Person person1 = new Person();
Console.WriteLine($"Person 1: {person1.Name}, {person1.Age} years old.");
// 使用带一个参数的构造函数
Person person2 = new Person("Alice");
Console.WriteLine($"Person 2: {person2.Name}, {person2.Age} years old.");
// 使用带两个参数的构造函数
Person person3 = new Person("Bob", 30);
Console.WriteLine($"Person 3: {person3.Name}, {person3.Age} years old.");
}
}
可选参数例子:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 使用可选参数的构造函数
public Person(string name = "Unknown", int age = 0)
{
Name = name;
Age = age;
}
}
1.5构造函数链:使用this调用另一个构造函数
定义:从一个构造函数中调用另一个构造函数,来避免重复输入代码。
例子:
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 默认构造函数,使用 this 调用带两个参数的构造函数
public Person() : this("Unknown", 0)
{
}
// 带一个参数的构造函数,使用 this 调用带两个参数的构造函数
public Person(string name) : this(name, 0)
{
}
// 带两个参数的构造函数
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
public class Program
{
public static void Main(string[] args)
{
// 使用无参数的构造函数
Person person1 = new Person();
Console.WriteLine($"Person 1: {person1.Name}, {person1.Age} years old.");
// 使用带一个参数的构造函数
Person person2 = new Person("Alice");
Console.WriteLine($"Person 2: {person2.Name}, {person2.Age} years old.");
// 使用带两个参数的构造函数
Person person3 = new Person("Bob", 30);
Console.WriteLine($"Person 3: {person3.Name}, {person3.Age} years old.");
}
}
1.6解构函数
通过解构函数,你可以从一个复杂对象中提取出多个成员变量,并将它们赋值给单独的变量。
解构函数是为了简化代码,提高可读性而出现的。允许将一个对象直接赋值给多个零散的变量。
添加 Deconstruct 方法(称为解构函数):在类或结构体内添加一个 Deconstruct 方法,该方法接受若干个 out 参数
例子:
using System;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 构造函数
public Person(string name, int age)
{
Name = name;
Age = age;
}
// 解构函数
public void Deconstruct(out string name, out int age)
{
name = Name;
age = Age;
}
}
public class Program
{
public static void Main(string[] args)
{
// 创建一个 Person 对象
Person person = new Person("Alice", 30);
// 使用解构函数提取属性值
var (name, age) = person;
// 输出结果
Console.WriteLine($"Name: {name}, Age: {age}");
// 也可以直接调用 Deconstruct 方法
person.Deconstruct(out string extractedName, out int extractedAge);
Console.WriteLine($"Extracted Name: {extractedName}, Extracted Age: {extractedAge}");
}
}

7152

被折叠的 条评论
为什么被折叠?



