在C#中,嵌套类、匿名类以及对象初始化器是几种强大的特性,它们可以极大地提高代码的可读性和灵活性。下面分别介绍这些特性的运用。
1. 嵌套类
嵌套类是指定义在另一个类内部的类。内部类可以访问其外围类的所有成员(包括私有成员),但外围类不能直接访问内部类的成员,除非内部类是公开的,并且外围类创建了内部类的实例。
示例:
public class OuterClass
{
private string outerField = "I'm Outer";
public class InnerClass
{
public void AccessOuter()
{
Console.WriteLine(outerField); // 访问外围类的私有成员
}
}
public void CreateInner()
{
InnerClass inner = new InnerClass();
inner.AccessOuter(); // 创建内部类实例并调用方法
}
}
class Program
{
static void Main(string[] args)
{
OuterClass outer = new OuterClass();
outer.CreateInner(); // 输出: I'm Outer
}
}
2. 匿名类
匿名类提供了一种方便的方式来封装一组只读属性而无需显式定义一个类。这对于LINQ查询、动态数据处理等场景特别有用。
示例:
var person = new
{
FirstName = "John",
LastName = "Doe",
Age = 30
};
Console.WriteLine($"Name: {person.FirstName} {person.LastName}, Age: {person.Age}");
注意,匿名类型的实例不能作为方法的返回类型,也不能用作类成员的类型(除非它们是var
类型或作为object
、dynamic
或IEnumerable<T>
等类型)。
3. 对象初始化器
对象初始化器提供了一种简洁的语法来设置对象的属性或字段。它可以在创建对象时直接初始化成员,而无需显式调用每个成员的setter方法。
示例:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person
{
FirstName = "Jane",
LastName = "Doe",
Age = 25
};
Console.WriteLine($"Name: {person.FirstName} {person.LastName}, Age: {person.Age}");
}
}
对象初始化器可以与集合初始化器结合使用,以初始化集合(如List)的元素。
结合使用示例:
List<Person> people = new List<Person>
{
new Person { FirstName = "Alice", LastName = "Smith", Age = 28 },
new Person { FirstName = "Bob", LastName = "Johnson", Age = 32 }
};
foreach (var person in people)
{
Console.WriteLine($"Name: {person.FirstName} {person.LastName}, Age: {person.Age}");
}
通过这些特性,C#为开发者提供了更灵活和强大的方式来处理对象和集合。