在C#中,构造函数是一种特殊的方法,它用于在创建对象时初始化该对象。构造函数的名字必须与类名完全相同,并且没有返回类型(连void也不写)。构造函数的主要目的是在对象被创建时设置对象的初始状态或分配资源。
构造函数的特点:
名称与类名相同:构造函数的名称必须与类名完全相同。
无返回类型:构造函数没有返回类型,连void也不写。
自动调用:在创建类的实例时,构造函数会自动被调用。
可以有多个:一个类可以有多个构造函数,只要它们的参数列表不同(这称为构造函数重载)。
初始化成员变量:构造函数通常用于初始化对象的成员变量。
我们用实例创造一个人族的类,并实例化10个人,代码如下:
using System;
namespace 创建人族
{
// 定义一个名为人族的类
public class 人族
{
// 类的成员变量
public string 人名 { get; set; }
public int 年龄 { get; set; }
// 构造函数
// 它没有返回类型,并且名称与类名相同
public 人族(string person, int age)
{
// 在构造函数内部,我们初始化成员变量
人名 = person ;
年龄 = age ;
// 可以在这里添加更多的初始化代码
Console.WriteLine($"人族 已创造: {人名}, {年龄}岁");
}
// 另一个无参构造函数(可选)
public 人族()
{
// 如果没有提供参数,则可以使用默认值初始化对象
人名 = "无名氏";
年龄 = 0;
Console.WriteLine("人族 已创造:无名氏,0岁");
}
}
class Program
{
static void Main(string[] args)
{
// 使用带参数的构造函数创建人族对象
for (int i = 0; i < 5; i++)
{
人族 人族1 = new 人族("爱丽丝" + i, 30);
// 使用无参构造函数创建人族对象
人族 人族2 = new 人族();
}
// 等待用户输入,以便查看控制台输出
Console.ReadKey();
}
}
}
官方的代码改编如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 构造函数
{
public class 坐标
{
public 坐标()
//this 关键字指代类的当前实例,还可用作扩展方法的第一个参数的修饰符。
: this(0, 0)
{ }
public 坐标(int x, int y)
{
X = x;
Y = y;
}
//get 关键字在属性或索引器中定义访问器方法,它将返回属性值或索引器元素。
//set 关键字在属性或索引器中定义访问器,它会向属性或索引器元素分配值。
public int X { get; set; }
public int Y { get; set; }
//this 关键字指代类的当前实例,还可用作扩展方法的第一个参数的修饰符。
public override string ToString() => $"({X},{Y})";
}
class Example
{
static void Main()
{
var p1 = new 坐标();
Console.WriteLine($"坐标 #1 是 {p1}");
// Output: 坐标 #1 是 (0,0)
var p2 = new 坐标(5, 3);
Console.WriteLine($"坐标 #2 是 {p2}");
Console.ReadLine();
// Output: 坐标 #2 是 (5,3)
}
}
}
构造函数实例二:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
public class Person
{
// Field
public string name;
// Constructor
public Person()
{
name = "unknown";
}
// Method
public void SetName(string newName)
{
name = newName;
}
}
class TestPerson
{
static void Main()
{
Person person = new Person();
Console.WriteLine(person.name);
person.SetName("John Smith");
Console.WriteLine(person.name);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
unknown
John Smith
*/
}