初始值设定项是啥c语言,如何使用对象初始值设定项初始化对象 - C# 编程指南 | Microsoft Docs...

如何使用对象初始值设定项初始化对象(C# 编程指南)

12/20/2018

本文内容

可以使用对象初始值设定项以声明方式初始化类型对象,而无需显式调用类型的构造函数。

以下示例演示如何将对象初始值设定项用于命名对象。 编译器通过首先访问无参数实例构造函数,然后处理成员初始化来处理对象初始值设定项。 因此,如果无参数构造函数在类中声明为 private,则需要公共访问的对象初始值设定项将失败。

如果要定义匿名类型,则必须使用对象初始值设定项。 有关详细信息,请参阅如何在查询中返回元素属性的子集。

示例

下面的示例演示如何使用对象初始值设定项初始化新的 StudentName 类型。 此示例在 StudentName 类型中设置属性:

public class HowToObjectInitializers

{

public static void Main()

{

// Declare a StudentName by using the constructor that has two parameters.

StudentName student1 = new StudentName("Craig", "Playstead");

// Make the same declaration by using an object initializer and sending

// arguments for the first and last names. The parameterless constructor is

// invoked in processing this declaration, not the constructor that has

// two parameters.

StudentName student2 = new StudentName

{

FirstName = "Craig",

LastName = "Playstead"

};

// Declare a StudentName by using an object initializer and sending

// an argument for only the ID property. No corresponding constructor is

// necessary. Only the parameterless constructor is used to process object

// initializers.

StudentName student3 = new StudentName

{

ID = 183

};

// Declare a StudentName by using an object initializer and sending

// arguments for all three properties. No corresponding constructor is

// defined in the class.

StudentName student4 = new StudentName

{

FirstName = "Craig",

LastName = "Playstead",

ID = 116

};

Console.WriteLine(student1.ToString());

Console.WriteLine(student2.ToString());

Console.WriteLine(student3.ToString());

Console.WriteLine(student4.ToString());

}

// Output:

// Craig 0

// Craig 0

// 183

// Craig 116

public class StudentName

{

// This constructor has no parameters. The parameterless constructor

// is invoked in the processing of object initializers.

// You can test this by changing the access modifier from public to

// private. The declarations in Main that use object initializers will

// fail.

public StudentName() { }

// The following constructor has parameters for two of the three

// properties.

public StudentName(string first, string last)

{

FirstName = first;

LastName = last;

}

// Properties.

public string FirstName { get; set; }

public string LastName { get; set; }

public int ID { get; set; }

public override string ToString() => FirstName + " " + ID;

}

}

对象初始值设定项可用于在对象中设置索引器。 下面的示例定义了一个 BaseballTeam 类,该类使用索引器获取和设置不同位置的球员。 初始值设定项可以根据位置的缩写或每个位置的棒球记分卡的编号来分配球员:

public class HowToIndexInitializer

{

public class BaseballTeam

{

private string[] players = new string[9];

private readonly List positionAbbreviations = new List

{

"P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF"

};

public string this[int position]

{

// Baseball positions are 1 - 9.

get { return players[position-1]; }

set { players[position-1] = value; }

}

public string this[string position]

{

get { return players[positionAbbreviations.IndexOf(position)]; }

set { players[positionAbbreviations.IndexOf(position)] = value; }

}

}

public static void Main()

{

var team = new BaseballTeam

{

["RF"] = "Mookie Betts",

[4] = "Jose Altuve",

["CF"] = "Mike Trout"

};

Console.WriteLine(team["2B"]);

}

}

请参阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值